我试图在表格中查看记录以确定优先顺序。最后,我想查看超过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点更新记录的选择结果。
答案 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
设置非常重要。