我有一张带时间戳的表.获取最后一小时每分钟记录计数的正确查询是什么.
即如果现在是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.
我发现这是一种替代方法,可用于确定每分钟插入或更新的记录数。预先将日期格式作为变量的好处在于,您可以轻松地将其更改为每小时分析。希望这可以帮助!
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)