按小时选择老化数据但不包括周末小时:SQL 2008R2

时间:2014-07-17 12:37:39

标签: sql

我试图在表格中查看记录以确定优先顺序。最后,我想查看超过72小时的数据记录。但是,我不希望在回报中计算星期六和星期日时间。

我开始使用这样的datepart:

SELECT [Record] 
FROM [TableD] D 
WHERE DATEPART(w,D.[LastChange]) NOT IN (7,1) 
AND D.LastChange <= GETDATE()-3

问题是,有人在更新记录或系统更新时会在周末发生变化。但是对于报告,我不想在星期六或星期日00:00:00到11:59计算72小时窗口的一部分。所以上述内容并不是我所需要的,而且我不确定获得我正在寻找的回报的最佳方法是什么。

添加额外说明:

让我们说我想把表中的所有记录拉到48小时内没有更新过。该表中的记录应该在一个时间窗口内工作,并且需要在那些尚未更新的记录上进行升级。但是,周六和周日的48小时不计算在内。因此,当我在星期一早上9点运行查询时,我不希望在星期五晚上7点更新记录的选择结果。

2 个答案:

答案 0 :(得分:0)

您可以将case语句添加到where查询中。

SELECT [Record] 
FROM [TableD] D 
WHERE  D.LastChange <=  CASE WHEN DATEPART(W,GETDATE()) = 1  
                                  THEN GETDATE() - 4
                             WHEN DATEPART(W,GETDATE()) <= 4   
                                  THEN GETDATE() - 5
                             ELSE GETDATE() - 3 END

答案 1 :(得分:0)

您必须像这样更改您的WHERE:

SELECT [Record]
FROM [TableD] D
WHERE ((DATEPART(DW, D.[LastChange]) + @@DATEFIRST) % 7) NOT IN (0, 1) AND
    DATEDIFF(DAY, D.[LastChange], GETDATE()) <
        (CASE WHEN ((DATEPART(DW, GETDATE()) + @@DATEFIRST) % 7) IN (2, 3) THEN 5 ELSE 3 END)

WHERE excludes weekend days in a sql server query的第一部分使用@@DATEFIRST

WHERE的第二部分用于涵盖星期一和星期二的确切天数。

正如我在处理星期计算时发布的第一个链接所述,考虑当前DATEFIRST设置非常重要。