如何从 table 获取最新日期数据
how to get latest date data from table
我想获取最新日期和下一个最新日期的行。我搜索了很多网站,但仍然不知道如何编写 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
在 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 标准 window 函数(基本上与所有其他主要数据库不同)。
在 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
之前还是之后可能会造成混淆。
我想获取最新日期和下一个最新日期的行。我搜索了很多网站,但仍然不知道如何编写 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
在 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 标准 window 函数(基本上与所有其他主要数据库不同)。
在 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
之前还是之后可能会造成混淆。