查找最大计数记录的间隔

时间:2016-04-10 08:07:58

标签: sql sql-server

我想要一个查询来查找sql​​server上每个任意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的有效方法。

1 个答案:

答案 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小时内),第二个查询只是一个简单的查询组。