2013-11-26 158 views
1

使用SQL Server 2008R2我試圖編寫一個查詢,它將返回特定時間範圍內的所有值的總和(在本例中爲15分鐘的時間間隔)將用於識別缺失的數據(每個服務器應該返回每15分鐘12個值)。我已經到了我能找到結果的地步,但我需要一種方法將它們全部結合在同一個查詢中。代碼下面(日期將通常由變量來定義,在這種情況下,使用2013年9月1日作爲示例):SQL Server - 結合來自單個查詢的結果

Select SUM(Accounted_for) 'accounted for',date,time,server 
from dbmetrics.dbo.tblmissing 
where DATE='09/01/2013' 
    and (TIME between '00:00:00' and '23:59:59') 
    and SERVER='Server01' 
group by DATE, TIME, server , DATEPART(hour,time), 
     DATEPART(MINUTE,time),DATEPART(second,time)/96 
GO 

結果沿着這個」 結果回來的返回線看起來像這樣

Number Date   Time     Server 
4   2013-09-01  12:00:01.0000000  server01 
6   2013-09-01  12:00:02.0000000  server01 
2   2013-09-01  12:00:15.0000000  server01 
10  2013-09-01  12:15:02.0000000  server01 
2   2013-09-01  12:15:09.0000000  server01 

我想看到什麼會

12  2013-09-01  12:00:00.0000  Server01 
12  2013-09-01  12:15:00.0000  Server01 
+2

你選擇的樣本數據的差。每個數據點的分鐘恰好以15分鐘的時間間隔方便着陸,兩個時間框架巧合地加起來爲12個。你可以包括幾行像'12:03:26.0000000',並確保總和不會'比賽? –

+0

另外,是否有任何原因的日期和時間組件分開存儲? – Kermit

+0

如果您需要四捨五入到最接近的15分鐘時間間隔,您可能需要查看[this](http://stackoverflow.com/questions/830792/t-sql-round-to-nearest-15-分鐘間隔)。 – Kermit

回答

1

您可能要GROUP BY[Server],而不是讓MAX()[Server]。如上面Aaron Bertrand提到的,它恰好發生在15分鐘的時間間隔內。該查詢將按時到分鐘並將數據分組。

SELECT SUM([Number]) AS [Number], 
     [Date], 
     CONVERT(time, DATEADD(minute, DATEDIFF(minute, 0, [Time]), 0)) AS [Time], 
     MAX([Server]) 
FROM [Table] 
GROUP BY [Date], 
      DATEADD(minute, DATEDIFF(minute, 0, [Time]), 0) 

See a demo