2012-09-24 72 views
0

我有一个SQL查询选择24小时内的所有记录,但是,我需要更新它以选择一个月内的所有记录(相对于记录时间戳记) 。因此,例如,如果我在2月份选择了任何记录,它应该从月份的开始到结束返回所有记录。SQL - 根据时间戳选择月份的所有记录

我必须每天查询的代码是:

SELECT Snapshot.xId, MAX(Snapshot.TimeStamp) AS Timestamp_Actual, 
       dateadd(dd, datediff(dd,0, MAX(Snapshot.TimeStamp)), 0) AS TimestampRange_Start, 
       dateadd(MI, 1439, dateadd(dd, datediff(dd,0, MAX(Snapshot.TimeStamp)), 0)) AS TimestampRange_End 
       FROM Snapshot 
       GROUP BY Snapshot.xId 

我至今是:

SELECT Snapshot.xId, MAX(Snapshot.TimeStamp) AS Timestamp_Actual, 
       dateadd(mm, datediff(mm,0, MAX(Snapshot.TimeStamp)), 0) AS TimestampRange_Start, 
       dateadd(dd, 0, dateadd(mm, datediff(mm,0, MAX(Snapshot.TimeStamp)), 0)) AS TimestampRange_End 
       FROM Snapshot 
       GROUP BY Snapshot.xId 

从上面的语句,那么我可以包括一个标准的WHERE子句检查TimestampRange_Start和TimestampRange_End的值来查看Timestamp_Actual是否落在它们之间。

回答

1
SELECT Snapshot.xId, MAX(Snapshot.TimeStamp) AS Timestamp_Actual 
    FROM Snapshot 
GROUP BY Snapshot.xId 
HAVING MAX(Snapshot.TimeStamp) >= dateadd(mm, datediff(mm, 0, getdate()), 0) 
    AND MAX(Snapshot.TimeStamp) < dateadd(mm, 1+datediff(mm, 0, getdate()), 0) 
+0

谢谢理查德;我修改了一些下面我的要求:“SELECT \t BMS_Snapshot.BuildingId,MAX(BMS_Snapshot.TimeStamp)AS Timestamp_Actual, \t \t \t \t DATEADD(毫米,DATEDIFF(毫米,0,MAX(BMS_Snapshot.TimeStamp)) ,0)AS TimestampRange_Start, \t \t \t \t DATEADD(毫米,1 + DATEDIFF(毫米,0,MAX(BMS_Snapshot.TimeStamp)),0)AS TimestampRange_End \t \t \t \t FROM BMS_Snapshot \t \t \t \t GROUP BY BMS_Snapshot .BuildingId” – Dan

相关问题