因此,我只想按日期对结果中的每个ID选择仅前1条记录,这样就不会再有另一个ID相同的记录了。
这是更详细的示例:日期格式为 YYYY-MM-DD
+----------+-------+-------------+
| Id | name | date |
+----------+-------+-------------+
| 1 | a | 2019-01-01 |
| 1 | a2 | 2019-01-02 |
| 2 | b | 2019-01-01 |
| 3 | c | 2019-01-02 |
| 3 | c2 | 2019-01-01 |
| 4 | d | 2019-01-01 |
+----------+-------+-------------+
Run Code Online (Sandbox Code Playgroud)
我想要的结果是这样的:
+----------+-------+-------------+
| Id | name | date |
+----------+-------+-------------+
| 1 | a2 | 2019-01-02 |
| 2 | b | 2019-01-01 |
| 3 | c | 2019-01-02 |
| 4 | d | 2019-01-01 |
+----------+-------+-------------+
Run Code Online (Sandbox Code Playgroud)
所以我只想获得一条记录,ID这是最新记录。
如何在SQL中实现呢?
感谢您的帮助!
利用desc row_number()进行分区Id和排序date
select *
from (
select *, rn = row_number() over (partition by [Id] order by [date] desc)
from yourtable
) d
where d.rn = 1
Run Code Online (Sandbox Code Playgroud)