我使用以下查询从4个不同日期检索快照值:-1天(最晚), - 2天, - 3天和--40天(尚未实施)。
SELECT [SnapshotDate]
,[SnapshotKey]
,[info1]
,[info2]
,[info3]
FROM [Database].[dbo].[Values]
WHERE [SnapshotDate] >= DATEADD(day,-3, GETDATE())
AND [SnapshotKey] = 'Some text here'
这导致以下图表:
查询首先不是正确的,因为它显示4个值,此时应该只显示3。其次,我想显示40天前的最后一张快照,如图所示。
我尝试了一些不同的查询,但没有设法弄清楚如何正确地执行此操作。
[SnapshotKey] = SELECT DATEADD(day,-40,getdate())
上述查询在理论上给出了正确的答案。但是,当我在查询中使用它时,没有结果。我相信这可能是由于没有日期转换或我使用" day"在我的查询中。我不确定。
有什么建议吗?
编辑:
我也试过使用以下但没有运气(没有结果):
CONVERT(date, [SnapshotDate]) = CONVERT(date, DATEADD(day,-40, GETDATE()))
答案 0 :(得分:1)
我不确定您的日期值是什么,但我猜这个报告是在5月2日运行的。
如果这是正确的,那么您需要更改范围以排除日期差异为零的位置。我个人在这种情况下使用DATEDIFF
,因为它更容易为我想象。
尝试将where子句更改为类似的内容。
WHERE (DATEDIFF(day, getdate(),[SnapshotDate]) BETWEEN -3 AND -1
OR DATEDIFF(day, getdate(), [SnapshotDate]) = -40)
AND [SnapshotKey] = 'Some text here'