sql - 如果 > 300 条记录或最近 300 条记录,则查询最近 10 分钟

标签 sql sql-server

我们目前有一个表来记录通过我们服务的流量。我们正在寻找一种方法来根据流量进行一些诊断/警报,但发现凌晨 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/

相关文章:

SQL Server - 在列中显示用户名

sql-server - SQL Server 中查询的优先级

mysql - 1 张非常大的 table 还是 3 张大 table ? MySQL 性能

sql - 什么是 Visual Studio GDR R2?我还需要 Power Tools吗?

java - jsp中分页公告板的sql

mysql - SQL View 获取不符合JOIN条件的记录

sql - 从 SQL Server 2012 查询结果中减去小时数

sql - SSIS删除重复数据

java - 如何通过java将数据库字段中的时间分别转换为小时、分钟、秒的整数?

sql - 复合主键自动递增