我目前正在为Visual Studio 2012编写查询,并使用SQL Server 2008 R2在Microsoft SQL Server Management Studio中对其进行测试。
目前,我已经阅读了MSDN关于日期时间和DATEADD的文章,但似乎我的语法是正确的。我还阅读了Google上的一些内容以及How to select last one week data from today's date和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
我的问题是:
答案 0 :(得分:0)
你究竟想要什么?你想要最后一个时钟的数据吗? (例如,如果它是10点37分,您希望所有数据在9:00到10:00之间)
或者您想要过去一小时的数据? (如果它是10:37:12你想要9:37:13和10:37:12之间的所有数据)
首先,将where子句更改为
...And NMSDS.SnapshotTimestamp >=
DateAdd(hour, datediff(hour, 0, Current_Timestamp)-1, 0),
And NMSDS.SnapshotTimestamp <
DateAdd(hour, datediff(hour, 0, Current_Timestamp), 0)
对于第二个,它更容易......
... And NMSDS.SnapshotTimestamp > Current_Timestamp - 1/24
但我承认我对第二个查询中的值6感到困惑...为什么是6,如果您正在尝试上一个 单个的数据小时??
答案 1 :(得分:0)
我不得不说你缺少时区数据。 根据您的查询,没有数据服务器所在的时区,或者他们将数据插入的时区。