我目前正在为 Visual Studio 2012 编写查询,并使用 SQL Server 2008 R2 在 Microsoft SQL Server Management Studio 中对其进行测试。
目前,我已经阅读了 MSDN 关于日期时间和 DATEADD 的文章,但我的语法似乎是正确的。我还在 Google 上阅读了一些内容,以及如何从今天的日期和MySQL中选择最近一周的数据:DATE_ADD以及更多 Stack Overflow 文章。
我现在正在运行的查询非常简单,只是:
SELECT [DateTime] AS 'Time'
,[RawStatus] AS 'Data'
FROM [ADatabase].[dbo].[SomeTable]
WHERE CustomPollerAssignmentID = '6570267A-22E1-4556-B344-EB27D9831419' --Latency Poller
AND RowID = 000042 --Some Modem Number
AND DATEADD(HOUR, -1, CURRENT_TIMESTAMP) <= DateTime
ORDER BY DateTime DESC
我期望这样做是返回最后一小时的数据(在这种情况下为网络延迟)。相反,它正在返回最后三个小时三十分钟。当运行带有注释掉 DATEADD 语句的代码时,它运行得很好并返回过去一两天的所有内容,这是该表存储延迟数据的最长时间。
现在,上面的奇怪代码是根据下面的内容建模的,我知道这是可行的:
SELECT NMSDS.[SnapshotTimestamp] AS 'Time'
,[LatencyValue] AS 'Latency'
FROM [ADifferentDatabase].[dbo].[AnotherTable] Late
INNER JOIN ADifferentDatabase.dbo.YetAnotherTable NMSDS ON NMS_Id = 1
AND NMSDS.SnapshotID = Late.SnapshotID
WHERE DATEADD(HOUR, -6, CURRENT_TIMESTAMP) <= NMSDS.SnapshotTimestamp
AND InrouteGroupId = @IRID
AND NetworkId = @NTID
ORDER BY [Late].SnapshotID ASC
我的问题是:
- 我错过了什么?
- 我的查询格式是否错误?第二个是为什么它会返回 3.5 小时而不是 1 小时,因为第二个查询实际上可以正常工作并正确返回内容?