私はこのようなテーブルを持っています
from | to | value
-----------------------
08:10 | 08:12 | 2
08:13 | 08:20 | 5
08:30 | 08:45 | 3
08:46 | 08:55 | 1
そして、たとえば1、10、60分の間隔でグループ化し、各分に1つの値があると仮定して、平均値を取得する必要があります。
注:範囲の間に穴があり、からは包括的から非包括的までです
from | to | average_value
-----------------------
08:10 | 08:19 | 4
08:20 | 08:29 | 5
08:30 | 08:39 | 3
08:40 | 08:49 | 2
08:50 | 08:59 | 1
私のアイデアは、ストアドプロシージャを使用して、エントリを次のように変換することでした。
time | value
-----------------------
08:10 | 2
08:11 | 2
08:12 | 2
08:13 | 5
...
08:20 | 5
08:30 | 3
...
08:45 | 3
08:50 | 1
...
08:55 | 1
私の最初の試み
DELIMITER $$
CREATE PROCEDURE Decompose()
BEGIN
DECLARE num_rows INT;
DECLARE from DateTime;
DECLARE to DateTime;
DECLARE value double;
DECLARE friends_cur CURSOR FOR SELECT from, to, value FROM sourcetable;
-- 'open' the cursor and capture the number of rows returned
-- (the 'select' gets invoked when the cursor is 'opened')
OPEN friends_cur;
select FOUND_ROWS() into num_rows;
WHILE num_rows > 0 DO
FETCH friends_cur INTO from, to, value;
SELECT from, value;
SET num_rows = num_rows - 1;
END WHILE;
CLOSE friends_cur;
END$$
DELIMITER ;
ループ内の各SELECTは、行を返す代わりに毎回新しい結果セットを作成するため、「コマンドが同期していません」エラーが発生します。
質問:
- ストアドプロシージャを何らかの方法で機能させることはできますか?
- 各間隔の平均値を取得できるSQLはありますか?