我想要一个查询来查找sqlserver上每个任意24小时的最大记录数。
例如,让我有下表
event | time
-----------------
1 | 25/1/2009 20:15:00
1 | 25/1/2009 23:15:00
5 | 10/1/2009 02:15:00
1 | 26/1/2009 00:15:00
1 | 30/1/2009 21:15:00
5 | 10/1/2009 23:15:00
我想查询结果
event | max | start time | end time
1 | 2 | 25/1/2009 20:15:00 | 26/1/2009 00:15:00
5 | 1 | 10/1/2009 02:15:00 | 11/1/2009 02:15:00
即使结束时间是24小时内最后一次记录的时间也没关系,这意味着
event | max | start time | end time
1 | 2 | 25/1/2009 20:15:00 | 26/1/2009 20:15:00
5 | 1 | 10/1/2009 02:15:00 | 10/1/2009 23:15:00
如何通过sql-server完成? 我已经通过将数据库连接到我的java-app来完成这项工作,但我想要使用纯sql-server的有效方法。
答案 0 :(得分:0)
试试这个:
DECLARE @StartDateTime datetime
;WITH cte AS
(
SELECT [event], [time]
FROM YourTable
WHERE [time] >= @StartDateTime
AND [time] <= DATEADD(HOUR, 24, @StartDateTime)
)
SELECT [event],
COUNT(*) As [max]
MIN([time]) As StartTime,
MAX([time]) As EndTime
FROM CTE
GROUP BY [event]
cte只获取表中的相关记录(时间在指定的24小时内),第二个查询只是一个简单的查询组。