如何从单个表中获取两列的最大值?

时间:2014-07-23 08:49:26

标签: mysql

假设我有一个名为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);

但它不起作用,如果有人帮助我的朋友,那真的很明显,

提前致谢!


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

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

实际上我想用最大日期条件显示所有值。为了您的通关,让我给出我的原始表和值

表名:价格

City Gold_Rate Silver_Rate Date

孟买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

现在预期的输出将是

City Gold_Rate Silver_Rate Date

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

如何编写查询好友,

先谢谢

4 个答案:

答案 0 :(得分:1)

IF BY MAX DATE

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

此查询可以实现您想要的技巧:

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

输出:(给出项目名称,项目的最小值,项目的最大日期,费率为项目的最大日期)

 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

答案 3 :(得分:0)

可能是这样的

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