は、timestamp列を持つテーブル、例えば考える:
(1)A:MySQLタイムスタンプの範囲で行を合計するにはどうすればよいですか?
timestamp | id | value
--------------------------------------
2001-01-01 00:00:00 | 1 | 3
2001-01-01 00:00:00 | 2 | 5
--------------------------------------
2001-01-02 00:00:00 | 1 | 6
2001-01-02 00:00:00 | 2 | 10
2001-01-02 00:00:00 | 3 | 7
--------------------------------------
2001-01-03 00:00:00 | 3 | 14
2001-01-03 00:00:00 | 2 | 15
--------------------------------------
2001-01-03 00:00:00 | 1 | 9
2001-01-03 00:00:00 | 2 | 20
と与えられた集約レベルを、私は結果以上(合計)集計したい2日を言います上記の例では、与えられたAGGレベルの移動ウィンドウです:2001-01-01〜2001-01-02,2001-01-02〜2001-01-03、2001-01-03〜2001-01-04
timestamp_1 | timestamp_2 | id | agg_value
-----------------------------------------------------------
2001-01-01 00:00:00 | 2001-01-02 00:00:00 | 1 | 9 (=3+6)
2001-01-01 00:00:00 | 2001-01-02 00:00:00 | 2 | 15 (=5+10)
2001-01-01 00:00:00 | 2001-01-02 00:00:00 | 3 | 7 (=7)
-----------------------------------------------------------
2001-01-02 00:00:00 | 2001-01-03 00:00:00 | 1 | 6 (=6)
2001-01-02 00:00:00 | 2001-01-03 00:00:00 | 2 | 25 (=10+15)
2001-01-02 00:00:00 | 2001-01-03 00:00:00 | 3 | 21 (=7+14)
-----------------------------------------------------------
2001-01-03 00:00:00 | 2001-01-04 00:00:00 | 1 | 9 (=9)
2001-01-03 00:00:00 | 2001-01-04 00:00:00 | 2 | 35 (=15+20)
2001-01-03 00:00:00 | 2001-01-04 00:00:00 | 3 | 14 (=14)
(2)上記の範囲内で重複しない除算を行います。例:2001-01-01もたらされる、2001年1月3日2001年1月4日に、2001年1月2日までに:
timestamp_1 | timestamp_2 | id | agg_value
-----------------------------------------------------------
2001-01-01 00:00:00 | 2001-01-02 00:00:00 | 1 | 9 (=3+6)
2001-01-01 00:00:00 | 2001-01-02 00:00:00 | 2 | 15 (=5+10)
2001-01-01 00:00:00 | 2001-01-02 00:00:00 | 3 | 7 (=7)
-----------------------------------------------------------
2001-01-03 00:00:00 | 2001-01-04 00:00:00 | 1 | 9 (=9)
2001-01-03 00:00:00 | 2001-01-04 00:00:00 | 2 | 35 (=15+20)
2001-01-03 00:00:00 | 2001-01-04 00:00:00 | 3 | 14 (=14)
(のような基本的には(1)オーバーラップなし)
ありがとうございます!
編集:溶液を添加
私は、少なくとも用溶液(1):
SELECT t1.timestamp AS timestamp1,
MAX(t2.timestamp) AS timestamp2, t1.id,
SUM(t2.value) AS agg_value
FROM my_table t1
LEFT JOIN my_table t2 ON
(t2.timestamp >= t1.timestamp AND
t2.timestamp <= ADDDATE(t1.timestamp,INTERVAL 2 DAY) AND
t2.id = t1.id)
GROUP BY t1.timestamp, t1.id
(2)は、おそらくのサブセットにフィルタリングすることができるためのソリューション上記。
相関サブクエリを使用します。 –
はすべてテーブルに入る予定ですか?ギャップの可能性はありますか?すなわちtimestamp_1には1/1/2001、1/2/2001、1/3/2001、1/6/2001が含まれています...あなたはまだ1/4-1/5合計が必要でしょうか? –
すべての日付がテーブルにあるわけではありません。たとえば、あなたが与えた例では、1/4-1/5合計には関心がありません。 – Ariel