如何从表中获取最新的日期数据

时间:2016-10-09 14:02:00

标签: mysql sql greatest-n-per-group

我想获得最新日期和下一个最新日期的行。我搜索了很多网站,我仍然不知道如何编写sql语句。

从此

id      inputDate       refNo
1       2016-09-22      16092201820X0X
2       2016-09-22      16092200230X1X
3       2016-09-22      16092200810X3X
4       2016-09-21      16092200430X2X
5       2016-09-21      16092201460X7X
6       2016-09-21      16092200430X1X
7       2016-09-20      16092202260X3X
8       2016-09-20      16092200330X6X
9       2016-09-20      16092200610X3X
10      2016-09-19      16092200430X8X
11      2016-09-19      16092200450X1X

到这个

id      inputDate       refNo
1       2016-09-22      16092201820X0X
2       2016-09-22      16092200230X1X
3       2016-09-22      16092200810X3X
4       2016-09-21      16092200430X2X
5       2016-09-21      16092201460X7X
6       2016-09-21      16092200430X1X

1 个答案:

答案 0 :(得分:1)

在ANSI标准SQL中,您将使用dense_rank()

select t.*
from (select t.*, dense_rank() over (order by inputdate desc) as seqnum
      from t
     ) t
where seqnum <= 2;

MySQL不支持ANSI标准窗口函数(与基本上所有其他主要数据库不同)。

在MySQL中,这比较棘手。这是一个方便的方法:

select t.*
from t join
     (select inputdate
      from (select distinct inputdate from t) t
      order by inputdate desc
      limit 2
     ) tt
     on t.inputdate = tt.inputdate;

您实际上并不需要第二个子查询,因此您可以这样做:

select t.*
from t join
     (select distinct inputdate
      from t
      order by inputdate desc
      limit 2
     ) tt
     on t.inputdate = tt.inputdate;

但要记住select distinct之前或之后order by是否发生,可能会令人困惑。