【问题标题】:How to get a maximum value of two columns from a single table?如何从单个表中获取两列的最大值?
【发布时间】:2014-09-14 08:50:20
【问题描述】:

假设我有一个名为 Item 的表,在这里我将给出示例表值和我的预期输出

Item
------
Sl.No   Itemname    Rate    Date

1        A      200             15/01/2013
2        B      500             24/05/2013
3        C      600             12/06/2013
4        A      400             17/07/2013
5        A      550             18/08/2013
6        B      150             19/09/2013
7        C      140             20/10/2013


Expected Output:

Sl.No   Itemname    Rate    Date

1         A         550        18/08/2013
2         B         150        19/09/2013
3         C         140        20/10/2013

可以写什么查询来得到这个输出??

我刚刚尝试了这个查询,

select * from postagitem group by categoryname where date = 
  (SELECT MAX(date) FROM postagitem);

但它不起作用,如果有人帮助我朋友,它真的很可观,

提前致谢!


感谢所有回复宝贵意见的朋友,

但仍然没有得到我正确的输出朋友,

实际上我想以最大日期的条件显示所有值。为了您的许可,让我提供我的原始表格和值

表格名称:价格

城市金_汇率银_汇率日期

孟买 3000 60 13-07-2014 德里 4000 50 14-04-2014 班加罗尔 1400 40 16-06-2014 孟买 1500 58 18-09-2014 孟买 2500 54 19-08-2014 德里 1800 60 01-10-2014 班加罗尔 1700 44 02-11-2014

现在预期的输出将是

城市金_汇率银_汇率日期

Mumbai 1500 58 18-09-2014 -->(最大/最近日期的记录) 德里 1800 60 01-10-2014 --> (最大/最近日期的记录) Bangalore 1400 40 16-06-2014 -->(最大/最近日期的记录)

查询好友怎么写,

提前致谢

【问题讨论】:

  • 为什么 B & C 的值不是最大值?
  • 为什么您希望 S1.No 在 A 的结果中为 1 而不是 5?
  • @IleshPatel 他正在服用最新的日期
  • 你想要最大值或该值的最大 sn
  • (并不是说它与这个问题特别相关,但是)我是 SQL。我不知道“15/01/2013”​​是什么。 :-(

标签: mysql


【解决方案1】:

这个查询可能会给你预期的结果:

SELECT * FROM `table` t1
WHERE (SELECT count(*) FROM `table` t2
       WHERE t1.Itemname = t2.Itemname AND
             t1.Date < t2.date) = 0

同样的查询,但这个可能更容易理解:

SELECT *, (SELECT count(*) FROM `table` t2 WHERE t1.Itemname = t2.Itemname AND t1.Date < t2.date) AS `LaterRecords`
FROM `table` t1
HAVING `LaterRecords` = 0

【讨论】:

  • @AmarnathBalasubramanian 对于每一行我选择具有相同项目名称和较晚日期的行数。如果没有这样的行(count == 0),我会显示这一行。存在错误,如果同一项目在每个最大日期有多个记录,但看起来其他答案也不能解决此问题
  • @AmarnathBalasubramanian 添加了另一个可能有助于理解第一个查询的查询
【解决方案2】:

如果截止日期

SELECT * FROM test t 
where date=(select max(date) from test t1 where t.itemname=t1.itemname)

【讨论】:

    【解决方案3】:

    这个查询可以满足你的需要:

    SELECT B.MINSLNO, B.ITEMNAME, A.RATE, B.MAXDATE FROM
    MY_TABLE A,
    (
       SELECT MIN(SLNO) MINSLNO, ITEMNAME, MAX(DATEE) MAXDATE FROM MY_TABLE
       GROUP BY ITEMNAME
    ) B
    WHERE A.DATEE = B.MAXDATE
    

    输出:(给出项目名称、项目的最小 slno、项目的最大日期、项目的 maxdate 评分)

     Minslno    |itemname| rate  | maxdate
        1       |A       |550    |  18-AUG-2013
        2       |B       |  150  |  19-SEP-2013
        3       |C       |140    |  20-OCT-2013
    

    JS Fiddle Here

    【讨论】:

      【解决方案4】:

      可能是这样的

      SELECT T1.M_SINO AS SL_NO,T.ITEMNAME,T.RATE,T.DATE 
      FROM Test T INNER JOIN
           (SELECT Itemname,Max(date)MyDat ,Min(SL_NO) As M_SINO 
            FROM Test 
            GROUP BY Itemname) T1 ON
            T.Date = T1.MyDat AND
            T.Itemname = T1.Itemname
      

      FIDDLE DEMO

      输出:


      Sl.No   Itemname    Rate       Date
      
      1         A         550        18/08/2013
      2         B         150        19/09/2013
      3         C         140        20/10/2013
      

      【讨论】:

      • 老兄,这个查询对我不起作用..我需要查询来显示与 max(date) 相关的记录..
      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2018-11-15
      相关资源
      最近更新 更多