查找哪个时间范围记录最多

时间:2014-12-17 10:56:57

标签: sql time max

我如何知道哪个时间段的记录最多?它可以是每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

任何已知的模式怎么做?

1 个答案:

答案 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。

另外,请注意,此查询仅在您提供以秒为单位的时间间隔而非其他时间间隔(分钟,小时等)时才有效。