3分

2017-10-13 3 views
0

私はSQLを練習していると私は3分かけて値を累積行うために列を追加したいと思いかけた値を蓄積する3列目:
3分

:私はこれまでのところ、このSQLを書いた

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 

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

しかし、解決策を見つけるのは難しいです。私はGROUP BYとDATEDIFFを試しましたが、失敗しました(エラー)。

私にいくつかのヒントを教えてください。

+5

[タグ:RDBMS]あなたが使用していますか? – Mureinik

+1

pls。 DBMS(MySQL、MS SQL Serverなど)にタグを付けてください。 –

+0

私はSQL Serverを使用してMicrosoftを使用しています – Julien

答えて

0

1つの一般的な方法では、相関サブクエリが使用されます。時代を扱うための関数は、データベースによって異なりますが、考え方は次のとおりです。

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構文を使用しています。これはデータベースによって異なる場合があります。

EDIT:

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のコピーですか?私の場合は、最後の3分間に合計を実行できる新しい列 'sum'をクエリで作成する必要があります。 私はMicrosoft SQL Serverを使用していますが、基本的な機能しか持っていないと思います。 [私のテーブルのスクリーンショット] [1] [1]:https://i.stack.imgur.com/udfB4.pngあなたのため – Julien

+0

おかげでSQL Serverにクエリを翻訳するのに役立ちます。私はまだt2についての質問があります。それはtのコピーですか?それはクエリからサーバーによって自動的に作成されますか?私はまだメカニックにいくつかの問題があります。 – Julien

+0

't2'はテーブルエイリアスです。 't'の2番目の参照です。 –