我正在努力编写查询以产生以下记录.
我有一张记录表
c1 c2 c3 c4 c5 c6
1 John 2.3.2010 12:09:54 4 7 99
2 mike 2.3.2010 13:09:59 8 6 88
3 ahmad 2.3.2010 14:09:59 1 9 19
4 Jim 23.3.2010 16:35:14 4 5 99
5 run 23.3.2010 12:09:54 3 8 12
Run Code Online (Sandbox Code Playgroud)
我想只获取记录: -
3 ahmad 2.3.2010 14:09:59 1 9 19
4 Jim 23.3.2010 16:35:14 4 5 99
Run Code Online (Sandbox Code Playgroud)
我的意思是按列c3排序的记录和当天最新的记录.在这里,我有1,2,3条记录,在一天中的不同时间.在那里我需要按日期desc排序的记录,然后只需要前1个记录.类似的4和5.你能帮我写一个查询.
如果您使用的是SQL Server 2008或2008 R2,则可以尝试以下操作:
WITH TopPerDay AS
(
SELECT
c1, c2, c3, c4, c5, C6,
ROW_NUMBER() OVER
(PARTITION BY CAST(c3 AS DATE) ORDER BY c3 DESC) 'RowNum'
FROM dbo.YourTable
)
SELECT *
FROM TopPerday
WHERE RowNum = 1
Run Code Online (Sandbox Code Playgroud)
我基本上按天划分数据(使用DATESQL Server 2008及更高版本中的类型),然后按c3列按降序排序.这意味着,对于每一天,最老的行都会有RowNum = 1- 所以我只是从Common Table Expression中选择那些行,我就完成了.