我怎么知道哪个时间段记录最多?它可以是每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、10:00、10:02)从09:58开始的3条记录。我根本不知道该怎么做。
我知道如何在一小时内找到最多的记录:
SELECT TOP 1 HOUR(TIME) AS TIME,
COUNT(*) AS count
FROM Records
GROUP BY Hour(TIME)
ORDER BY count DESC
任何已知的模式该怎么做?
假设您使用的是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相适应的对应函数替换该函数即可。
另外,请注意,仅当您提供以秒为单位的时间间隔而不是其他时间间隔(分钟,小时等)时,此查询才有效
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句