私は温度を読み取るテーブルを持っており、過去24時間の平均時間を取得する必要がありますが、現在の時間を「ラップアラウンド」します。時系列をラップアラウンドでグループ化する
私はこの文を使用します。
SELECT DISTINCT HOUR(readAt) pointTime
, ROUND(AVG(temperature),1) avgTemp
FROM TempReadings
WHERE readAt BETWEEN DATE(NOW() - INTERVAL 1 DAY) AND NOW())
AND temperature IS NOT NULL
GROUP
BY pointTime;
readAtはタイムスタンプです。 私は現在の時間の周りに "ラップ"を注文したいので、10.01amでクエリを実行すると、最初の行は前日の午前9時、午前10時の最後の行になります。上記のクエリから
私はこれを取得:
+-----------+---------+
| pointTime | avgTemp |
+-----------+---------+
| 5 | 23.2 |
| 6 | 12.9 |
| 7 | 11.6 |
| 8 | 14.3 |
| 9 | 10.4 |
| 10 | 12.5 |
| 17 | 0.0 |
| 18 | 23.3 |
| 19 | 14.4 |
| 20 | 14.6 |
| 21 | 17.1 |
+-----------+---------+
11 rows in set (0.00 sec) ------------------ formatted as codes
編集22.10:私は、次のテストのステートメントを使用します。
ステートメントの下CREATE TABLE TempReadings (
readAt DATETIME NOT NULL,
temperature FLOAT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=big5;
INSERT INTO TempReadings VALUES ((NOW() - INTERVAL 13 HOUR), 10);
INSERT INTO TempReadings VALUES ((NOW()), 20);
INSERT INTO TempReadings VALUES ((NOW() - INTERVAL 2 HOUR), 30);
INSERT INTO TempReadings VALUES ((NOW() - INTERVAL 14 HOUR), 40);
INSERT INTO TempReadings VALUES ((NOW() - INTERVAL 16 HOUR), 50);
SELECT * FROM TempReadings;
+---------------------+-------------+
| readAt | temperature |
+---------------------+-------------+
| 2016-10-21 20:15:38 | 10 |
| 2016-10-22 09:15:38 | 20 |
| 2016-10-22 07:15:38 | 30 |
| 2016-10-21 19:15:38 | 40 |
| 2016-10-21 17:15:38 | 50 |
+---------------------+-------------+e
は時間によってソートされた平均値を生成するが、私は最も古いをしたいと思います平均は最初の行になります
SELECT DISTINCT(HOUR(readAt)) as pointTime, ROUND(AVG(temperature), 1) AS avgTemp FROM TempReadings WHERE (readAt BETWEEN DATE(NOW() - INTERVAL 1 DAY) AND NOW()) AND temperature IS NOT NULL GROUP BY pointTime;
+-----------+---------+
| pointTime | avgTemp |
+-----------+---------+
| 7 | 30.0 |
| 9 | 20.0 |
| 17 | 50.0 |
| 19 | 40.0 |
| 20 | 10.0 |
+-----------+---------+
ですから、時刻): 17(第一列)、19、20、7、9(最後)
注BY。 – Strawberry
この間隔を最後の24時間としたいのですか? – verhie
また、データセットのない結果セットは、無駄になります。 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry