2

ハイチャートを使用して、過去 1 時間の気温の変化を確認したいと考えています。

1 時間ごとに 20 ~ 30 の温度値を記録します。ここでは、過去 1 時間の平均値を 4 ~ 6 個 (10 分または 15 分間の値を 1 つ) 抽出してプロットします。たぶん、それを 3 つの値 (20 分間に 1 つ) に変更して、より滑らかなものにします。

私はそのような値を持っています(例えば):

mysql> SELECT date,valeur FROM temperature
+---------------------+--------+
| date                | valeur |
+---------------------+--------+
| 2013-09-26 11:30:40 |   25.2 |
| 2013-09-26 11:33:19 |   25.4 |
| 2013-09-26 11:34:12 |   25.5 |
| 2013-09-26 11:38:37 |   25.4 |
| 2013-09-26 11:39:30 |   25.4 |
| 2013-09-26 11:40:23 |   25.4 |
| 2013-09-26 11:43:02 |   25.4 |
| 2013-09-26 11:45:41 |   25.3 |
| 2013-09-26 11:47:33 |   25.3 |
| 2013-09-26 11:51:07 |   25.4 |
| 2013-09-26 11:51:52 |   25.3 |
...

このコマンドで抽出しようとしました:

SELECT ROUND(UNIX_TIMESTAMP(date)/(15 * 60)) AS timekey, ROUND(AVG(valeur),1) AS a FROM temperature WHERE date >= (now() - INTERVAL 1 HOUR) GROUP BY timekey ORDER BY DATE;

しかし、出力が得られません。間隔を 5 時間に変更すると、16 個の値が得られます。

[1534861, 24.600000]
[1534862, 24.600000]
[1534863, 24.600000]
[1534864, 24.700000]
[1534865, 24.700000]
[1534866, 24.600000]
[1534867, 24.600000]
[1534868, 24.600000]
[1534869, 24.600000]
[1534870, 24.600000]
[1534871, 24.700000]
[1534872, 24.700000]
[1534873, 24.700000]
[1534874, 24.800000]
[1534875, 25.000000]
[1534876, 25.200000]

このmysqlリクエストを修正する方法はありますか?

ありがとうございます

グレッグ

編集 - 選択した回答を参照してください: コードは良好でしたが、タイムゾーンはそうではありませんでした!

4

2 に答える 2

0

あなたの問題は、1 時間のタイムゾーンの違いである可能性が高いと推測しています。

過去 1 時間の値が得られず、過去 5 時間の値が 16 である場合 (4 時間分の値を構成)、過去 1 時間の値がないように聞こえます。確信がある場合は、 data のタイムゾーンと now() のタイムゾーンを確認してください

おそらくsysdateを使用してみてください。マニュアルから引用:

さらに、SET TIMESTAMP ステートメントは NOW() によって返される値に影響しますが、SYSDATE() によって返される値には影響しません。これは、バイナリ ログのタイムスタンプ設定が SYSDATE() の呼び出しに影響を与えないことを意味します。タイムスタンプをゼロ以外の値に設定すると、後続の NOW() の各呼び出しでその値が返されます。タイムスタンプをゼロに設定すると、この効果がキャンセルされるため、NOW() は再び現在の日付と時刻を返します。

2 つの関数の違いに関する追加情報については、SYSDATE() の説明を参照してください。

于 2013-10-10T08:22:04.270 に答える