2016-01-21 74 views
-1

我有一個查詢獲取最近24小時或記錄並計數它們,然後通過ID對記錄進行分組。選擇最近24小時加上當天的前8小時

我想什麼是它選擇過去24小時,加上前8小時當天的眼下

SELECT controllerID, 
     DATEPART (HOUR, dateadd(hour, datediff(hour, 0, dtReading), 0)) as TimeStampHour, 
     Count(*) As Count 
FROM [ReaderData] 
WHERE dtReading >= dateadd(day,datediff(day,1,GETDATE()),0) 
    AND dtReading < dateadd(day,datediff(day,0,GETDATE()),0) 
    AND (EventType = '(0x03)Door state low') 
    AND CardID = 'fffffff0' 
GROUP BY controllerID, dateadd(hour, datediff(hour, 0, dtReading), 0) 
ORDER BY controllerID, dateadd(hour, datediff(hour, 0, dtReading), 0); 

我可以改變這種狀況正在改變選擇的天-1和0在哪裏條件改變日期。目前這個查詢產生這樣

controllerID TimeStampHour Count 
    13     0   129 
    13     1   114 
    13     2   104 
    13     3   96 
    13     4   111 
    13     5   114 
    13     6   97 
    13     7   116 
    13     8   62 
    13     9   82 
    13     11   62 
    13     12   112 
    13     13   78 
    13     14   20 
    13     15   11 
    13     16   116 
    13     17   122 
    13     18   106 
    13     19   126 
    13     20   125 
    13     21   105 
    13     22   122 
    13     23   16 
    28     10   12 
    28     16   8 
    30     0   162 
    30     1   161 
    30     2   161 
    30     3   62 
    30     4   61 
    30     5   62 

結果正如你可以看到有用於每個小時的控制器ID

我想是表示小時的計數,以延長8小時的對於controllerID 13 23小時後,例如第二天 的TimeStampHour是0,但是這將是後的第二天已經被選定

+0

供您參考http://stackoverflow.com/questions/1888544/how-to-select-記錄從上次24小時使用sql –

+0

我不想過去24小時,我想要一天+第二天的第一個8小時 查詢我已經獲取選定日期的記錄只是不是第二天的第一個8小時 –

+0

爲什麼不像在DATEADD()中添加8小時那麼簡單? tetime過濾器?從您當前的腳本看來,您已經知道如何使用DATEADD()。 –

回答

1

看來你需要更換

dtReading >= dateadd(day,datediff(day,1,GETDATE()),0) 
AND dtReading < dateadd(day,datediff(day,0,GETDATE()),0) 

dtReading between dateadd(day,datediff(day,1,GETDATE()),0) AND dateadd(hour,8,dateadd(day,datediff(day,0,GETDATE()),0)) 
+0

感謝看起來正確的我想要什麼,只是讓我積極,如果我想回去的日子,我會改變 dateadd(day,datediff(day,1,GETDATE()),0)to dateadd( (date,2,GETDATE()),0) dateadd(hour,8,dateadd(day,datediff(day,0,GETDATE()),0))to dateadd(hour,8,dateadd (day,datediff(day,1,GETDATE()),0)) 然後這會讓我回來多一天正確嗎? –

0

嘗試這樣,它幾乎類似@Dmitry波利亞科夫

SELECT controllerID, 
     Datepart (HOUR, Dateadd(hour, Datediff(hour, 0, dtReading), 0)) AS TimeStampHour, 
     Count(*)              AS Count 
FROM [ReaderData] 
WHERE dtReading >= Dateadd(day, Datediff(day, 1, Getdate()), 0) 
     AND dtReading < Dateadd(hour, 8, Dateadd(day, Datediff(day, 0, Getdate()), 0)) 
     AND (EventType = '(0x03)Door state low') 
     AND CardID = 'fffffff0' 
GROUP BY controllerID, 
      Dateadd(hour, Datediff(hour, 0, dtReading), 0) 
ORDER BY controllerID, 
      Dateadd(hour, Datediff(hour, 0, dtReading), 0);