MYSQL:如何在单个查询中获得最大和第二个最大日期

时间:2016-05-26 13:14:24

标签: mysql sql

我正在尝试选择最大日期和第二个最大日期,但无法取得成功。

这是表格数据。

ID Country  DATE 
1   Canada  2016-05-26
2   Canada  2016-05-25
3   Canada  2016-05-24

4   USA     2016-04-02
5   USA     2016-04-01
6   USA     2016-03-20

期待输出

Country  Max_Date    2nd_Date

Canada  2016-05-26  2016-05-25 
USA     2016-04-02  2016-04-01

我为此做了什么:

使用此查询获取最大日期。

select Country, MAX(Date) from tbl GROUP BY (Country);

对于第二个最大日期但未能获得结果:

SELECT Country, MAX(date) FROM tbl WHERE Date NOT IN 

( select MAX(FROM) from tbl GROUP BY (Country)) GROUP BY (Country)

我应该尝试获得预期的输出。感谢

4 个答案:

答案 0 :(得分:2)

或者你可以试试这个

SELECT s.Country, Max(s.Date) Max_Date, 
(SELECT t.Date 
 FROM tbl t 
 Where s.Country=t.Country 
 ORDER BY Date DESC 
 LIMIT 1,1) 2nd_Date
FROM tbl s
GROUP BY COUNTRY;

LIMIT子句基于零,因此使用参数1,1跳过第一个(即最大值)&只返回一个值(第二个最大值)。

注意 - 如果最大日期重复,则查询将返回Max_Date& 2nd_Date为相同的值 - 如果这不是你想要的,那么你可以将DISTINCT添加到内部查询。

答案 1 :(得分:0)

这可能是一种痛苦。这是一种方法:

select t.country, maxdate, max(t.date) as secondate
from tbl t left join
     (select country, max(date) as maxdate
      from tbl
      group by country
     ) c
     on t.country = c.country and  t.date < c.maxdate
group by t.country;

答案 2 :(得分:0)

无需嵌套查询来解决此问题:

SELECT t1.country, max(t1.date), max(t2.date)
FROM tbl t1
  JOIN tbl t2 ON t1.country = t2.country AND t2.date < t1.date
GROUP BY t1.country;

答案 3 :(得分:0)

试试这个

Select Country, MAX(Date) As Date From tbl GROUP BY Country Order By Date Desc Limit 2;