我如何知道哪个时间段的记录最多?它可以是每4分钟,每31分钟甚至每9秒。
表格示例:
Id Time Name
1 10:35 Dan
2 11:47 Eli
3 10:00 Mike
4 12:02 George
5 10:02 Jack
6 09:58 Stephan
7 11:25 Tony
8 11:34 Daniel
9 11:11 Joe
10 10:59 Tanya
每60分钟一次(结果为10:59),但每5分钟一次(结果为:09:58)。
函数调用查询得到1个参数 - 跨度时间(以秒为单位),例如300(5分钟)。
在这种情况下,查询返回:{3,09:58}(5分钟内09:58的3条记录(09:58,10:00,10:02)。我根本不知道如何做到这一点。
我知道如何在一小时内找到最多的记录:
SELECT TOP 1 HOUR(TIME) AS TIME,
COUNT(*) AS count
FROM Records
GROUP BY Hour(TIME)
ORDER BY count DESC
任何已知的模式怎么做?
答案 0 :(得分:0)
假设您正在使用SQL Server或使用T-SQL的东西,以下查询应该适合您:
DECLARE @interval INT
SET @interval = 300
SELECT t.TIME,
(
SELECT count(*) AS cnt
FROM timetable
WHERE TIME >= t.TIME
AND TIME <= DATEADD(second, @interval, t.TIME)
) cnt
FROM timetable t
ORDER BY cnt DESC
如果您只想要第一条记录(时间间隔中包含大多数记录的时间戳),只需使用TOP 1
过滤查询,如下所示:
DECLARE @interval INT
SET @interval = 300
SELECT TOP 1 t.TIME,
(
SELECT count(*) AS cnt
FROM timetable
WHERE TIME >= t.TIME
AND TIME <= DATEADD(second, @interval, t.TIME)
) cnt
FROM timetable t
ORDER BY cnt DESC
以下是SQLFiddle,其中包含查询的工作原理。
如果您没有使用使用T-SQL的RDBMS,那么原则是相同的,您很可能只需要用适当的对应方替换DATEADD()
函数。您正在使用的RDBMS。
另外,请注意,此查询仅在您提供以秒为单位的时间间隔而非其他时间间隔(分钟,小时等)时才有效。