2017-10-13 69 views
0

我練SQL,我想增加一列做在3分鐘內累積值累積值:第三列超過3分鐘

Time Data Cumulative 
8:00 1 1 
8:01 2 3 
8:02 3 6 
8:03 2 7 
8:04 1 6 
8:04 1 4 

我寫了到目前爲止,這SQL:

SELECT EX.E3TimeStamp,EX.Data,EX.Data AS Sum 
FROM EX 
ORDER BY EX.E3TimeStamp ASC 

但我很難找到解決方案。我嘗試過使用GROUP BY和DATEDIFF,但不成功(錯誤)。

請如果你能給我一些提示!

+5

什麼[標籤:RDBMS]您使用的? – Mureinik

+1

。標記您正在使用的DBMS(MySQL,MS SQL Server等)。 –

+0

我正在使用Microsoft使用SQL Server – Julien

回答

0

一種通用方法使用相關子查詢。對於處理時間的功能由數據庫不同,但思路是:

select t.*, 
     (select sum(t2.data) 
     from t t2 
     where t2.time >= t.time - interval '3 minute' and 
       t2.time <= t.time 
     ) as cumulative 
from t; 

注:本品採用ANSI標準interval語法的時間計算。這可能因數據庫而異。

編輯:

的SQL Server版本是:

select t.*, 
     (select sum(t2.data) 
     from t t2 
     where t2.time >= dateadd(minute, -3, t.time) and 
       t2.time <= t.time 
     ) as cumulative 
from t; 
+0

我認爲間隔在我的情況下不起作用。另外我有一個關於t2的問題?它是t的副本嗎?就我而言,我只需要通過查詢創建一個新的'sum'列,我可以在最後3分鐘內完成總和。 我正在使用Microsoft SQL Server,我認爲它只具有基本功能。 [我的桌面截圖] [1] [1]:https://i.stack.imgur.com/udfB4.png – Julien

+0

感謝您幫助翻譯查詢到SQL Server。我仍然有一個關於t2的問題是查詢。它是t的副本嗎?它是由服務器從查詢中自動創建的?我仍然在機械方面遇到一些困難。 – Julien

+0

't2'是一個表別名。這是對't'的第二個參考。 –