TS SQL - 按分钟分组

Sun*_*nov 14 sql-server

我有一张带时间戳的表.获取最后一小时每分钟记录计数的正确查询是什么.

即如果现在是2:25,我想知道有多少记录在1:25和1:26之间,1:26和1:27,依此类推,所以我有60个结​​果.

Rob*_*nto 21

这将返回过去一小时内每分钟(您有记录的地方)的结果计数

SELECT DATEPART(n, time_stamp) AS minute, COUNT(*) as results
FROM table_name 
WHERE time_stamp > DATEADD(hh, -1, GETDATE())
GROUP BY DATEPART(n, time_stamp)
Run Code Online (Sandbox Code Playgroud)

根据数据的不同,这可能会返回少于60个结果.如果您必须有60个结​​果,则查询略有不同.这使用公用表表达式生成60个数字的列表和相关的子查询以获取每分钟的结果:

WITH numbers ( num ) AS (
    SELECT 1 UNION ALL
    SELECT 1 + num FROM numbers WHERE num < 60 )
SELECT num AS minute,
    (SELECT COUNT(*) AS results
    FROM table_name
    WHERE DATEPART(n, time_stamp) = num
    AND time_stamp > DATEADD(hh, -1, GETDATE())
FROM numbers
Run Code Online (Sandbox Code Playgroud)

要查看结果,请将DATEADD(hh,-1,GETDATE())替换为DATEADD(mi,-15,GETDATE()),您将得到最后15分钟的结果,其他分钟则得到0.


Aer*_*son 6

我发现这是一种替代方法,可用于确定每分钟插入或更新的记录数。预先将日期格式作为变量的好处在于,您可以轻松地将其更改为每小时分析。希望这可以帮助!

DECLARE @dateFormat as varchar(max) = 'yyyy-MM-dd HH:mm'

SELECT format(timeColumn, @dateFormat) AS minute, COUNT(*) as results
FROM yourTable
WHERE timeColumn > DATEADD(hh, -1, GETDATE())
GROUP BY  format(timeColumn, @dateFormat)
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)