我们目前有一个表来记录通过我们服务的流量。我们正在寻找一种方法来根据流量进行一些诊断/警报,但发现凌晨 2 点我们没有足够的流量来保证可靠(凌晨 2 点发生 1 次故障的故障率可能为 50%,但在上午 9 点当人们努力工作时,1 次失败可能是 0.01%)。
我们想通过服务器检查最近 10 分钟,如果最后 10 分钟没有 300 条记录,我们想返回直到有 300 条记录。
有没有办法在查询中做到这一点?
我们的表看起来像:
ID INT,
ServerID INT,
Success BIT,
ActionDate DATETIME
我可以使用 ROW_NUMBER()
获取最后 300 个数据,但如果流量足够高以至于这不是最后 10 分钟的完整数据,我们就会丢失可能相关的数据。
我想做一些类似的事情
SET _RowCount = SELECT COUNT(*) FROM tbl WHERE Date >= DATEADD(M, -10, GETDATE());
IF _RowCount < 300 SET @RowCount = 300;
SELECT TOP _RowCount records
但似乎无法使用变量作为 TOP 计数。
最佳答案
使用最后 300 条记录似乎是最简单的事情:
SELECT top 300 t.*
FROM tbl t
order by date desc;
但是您可以通过单个查询完成您想要的操作:
select t.*
from (select t.*, row_number() over (order by date desc) as seqnum
from tbl t
) t
where seqnum <= 300 or Date >= DATEADD(M, -10, GETDATE());
关于sql - 如果 > 300 条记录或最近 300 条记录,则查询最近 10 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19820484/