【发布时间】:2016-06-24 06:58:03
【问题描述】:
我有一个table,如下所示 -
ID | Reported Date | Device_ID
-------------------------------------------
1 | 2016-03-09 09:08:32.827 | 1
2 | 2016-03-08 09:08:32.827 | 1
3 | 2016-03-08 09:08:32.827 | 1
4 | 2016-03-10 09:08:32.827 | 2
5 | 2016-03-05 09:08:32.827 | 2
现在,我想要一个基于date column 的top 1 row 用于每个device_ID
预期输出
ID | Reported Date | Device_ID
-------------------------------------------
1 | 2016-03-09 09:08:32.827 | 1
4 | 2016-03-10 09:08:32.827 | 2
我正在使用SQL Server 2008 R2。我可以去写Stored Procedure 来处理它,但我想用简单的查询来做。
****************编辑******************************
“Felix Pamittan”的回答效果很好,但“N”只需将其更改为
SELECT
Id, [Reported Date], Device_ID
FROM (
SELECT *,
Rn = ROW_NUMBER() OVER(PARTITION BY Device_ID ORDER BY [ReportedDate] DESC)
FROM tbl
)t
WHERE Rn >= N
他在评论中提到了这一点,想把它添加到问题中,这样没有人会错过它。
【问题讨论】:
-
你可以使用
Group By和MAX来得到你想要的
标签: sql sql-server sql-server-2008-r2 database-administration