我正在尝试选择“最大日期”和“第二个最大日期”,但无法成功。
这是表数据。
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
Run Code Online (Sandbox Code Playgroud)
期望输出
Country Max_Date 2nd_Date
Canada 2016-05-26 2016-05-25
USA 2016-04-02 2016-04-01
Run Code Online (Sandbox Code Playgroud)
我这样做的目的是:
使用此查询获取最大日期。
select Country, MAX(Date) from tbl GROUP BY (Country);
Run Code Online (Sandbox Code Playgroud)
对于第二个最大日期但未能获得结果:
SELECT Country, MAX(date) FROM tbl WHERE Date NOT IN
( select MAX(FROM) from tbl GROUP BY (Country)) GROUP BY (Country)
Run Code Online (Sandbox Code Playgroud)
我应该尝试什么才能获得预期的输出。谢谢
或者你可以尝试这个
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;
Run Code Online (Sandbox Code Playgroud)
LIMIT 子句是从零开始的,因此使用参数 1,1 会跳过第一个(即最大值)值并仅返回一个值(第二个最大值)。
注意 - 如果最大日期重复,查询将返回 Max_Date 和 2nd_Date 作为相同的值 - 如果这不是您想要的,那么您可以将 DISTINCT 添加到内部查询。