创建查询语句以在ROLLING时间间隔内输出记录

时间:2013-04-27 09:18:54

标签: sql sql-server time intervals

enter image description here enter image description here我要做的是创建一个SELECT语句,在滚动的30分钟窗口内搜索重复的单元格值。从记录发送给DBA团队的每个警报的表中。

这就是我所拥有的。

USE db
GO

SET NOCOUNT ON

DECLARE @AlertDateTime smalldatetime

SELECT  @AlertDateTime = getdate() 

BEGIN

SELECT * FROM SendAlertLog

WHERE EXISTS

(
    SELECT SendAlertLog.Event 

    FROM SendAlertLog

    GROUP BY Event  

    HAVING COUNT (1) >= 2
)

AND SendAlertLog.SkipFlag   != 'Y' 
AND AlertDateTime >= dateadd (mi, -30, @AlertDateTime) 

END 

我的结果是一个包含所有列标题的空白表。但是有超过95,000个!

Blank Table results from at table of 95,000rows

有关如何输出过去30分钟内发生的警报的任何建议?

Proof of Alerts populating table: CST

图像#2显示最近1分钟CST中记录的最后一次警报

2 个答案:

答案 0 :(得分:1)

试试这个 -

DECLARE @AlertDateTime DATETIME
SELECT @AlertDateTime = DATEADD(mi, -30, GETDATE())  

SELECT * 
FROM dbo.SendAlertLog
WHERE AlertDateTime >= @AlertDateTime 
    AND ISNULL(Skipflag, 'E') IN ('E', 'O', 'N')  

答案 1 :(得分:0)

在许多问题中,SkipFlag可以为空吗?

AND SendAlertLog.SkipFlag != 'Y' 

由于null != 'Y'不正确(但未知),因此会过滤掉SkipFlagnull'Y'的所有行。