Ans*_*gam 0 sql sql-server database-administration sql-server-2008-r2
我有一个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
Run Code Online (Sandbox Code Playgroud)
现在,我想要一个top 1 row基于date column每个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
Run Code Online (Sandbox Code Playgroud)
我在用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
Run Code Online (Sandbox Code Playgroud)
他在评论中提到了这一点,并将其添加到问题中,以便没有人遗漏它.
用途ROW_NUMBER:
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 = 1
Run Code Online (Sandbox Code Playgroud)