1

我目前正在为 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

我的问题是:

  1. 我错过了什么?
  2. 我的查询格式是否错误?第二个是为什么它会返回 3.5 小时而不是 1 小时,因为第二个查询实际上可以正常工作并正确返回内容?
4

2 回答 2

0

我不得不说您缺少时区数据。从您的查询中,没有数据服务器位于哪个时区,或者它们将数据插入到哪个时区。

于 2013-05-07T03:43:47.060 回答
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,如果你正在尝试最后一个小时的数据?

于 2013-05-06T17:22:51.910 回答