0

そのため、MySQL クエリで平均を計算しようとして少し行き詰まりました。私がやろうとしているのは、2 つのテーブルからデータを読み取ることです。そのうちの 1 つは小さく、センサーに関する部屋、シリアル番号、標高、およびその他のデータを説明するエントリがあります。もう 1 つのテーブルには、各シリアル番号の温度出力の記録が含まれています。各テーブルのサンプル データを次に示します。

+------------------+-------+------+-----------+---------+--------+-----------+
| serial           | room  | rack | elevation | type    | system | threshold |
+------------------+-------+------+-----------+---------+--------+-----------+
| 2D0008017075F210 | 2B211 | 5    |         5 | DS18S20 | test   |        68 |
| 1D00080170496D10 | 2B211 | 5    |         5 | DS18S20 | test   |        68 |
| 380008017037ED10 | 2B211 | 5    |         5 | DS18S20 | test   |        68 |
+------------------+-------+------+-----------+---------+--------+-----------+


+------------------+---------------------+---------+
| serial           | dtg                 | reading |
+------------------+---------------------+---------+
| 2D0008017075F210 | 2013-08-02 12:30:28 |    98.6 |
| 1D00080170496D10 | 2013-08-02 12:30:28 |    73.4 |
| 380008017037ED10 | 2013-08-02 12:30:28 |    79.7 |
| 2D0008017075F210 | 2013-08-02 12:30:38 |    98.6 |
| 1D00080170496D10 | 2013-08-02 12:30:38 |    73.4 |
| 380008017037ED10 | 2013-08-02 12:30:38 |    79.7 |
| 2D0008017075F210 | 2013-08-02 12:30:48 |    98.6 |
| 1D00080170496D10 | 2013-08-02 12:30:48 |    73.4 |
| 380008017037ED10 | 2013-08-02 12:30:48 |    79.7 |
| 2D0008017075F210 | 2013-08-02 12:30:58 |    98.6 |
| 1D00080170496D10 | 2013-08-02 12:30:58 |    73.4 |
| 380008017037ED10 | 2013-08-02 12:30:58 |    79.7 |
| 2D0008017075F210 | 2013-08-02 12:31:08 |    98.6 |
| 1D00080170496D10 | 2013-08-02 12:31:08 |    73.4 |
| 380008017037ED10 | 2013-08-02 12:31:08 |    79.7 |
| 2D0008017075F210 | 2013-08-02 12:31:18 |    98.6 |
| 1D00080170496D10 | 2013-08-02 12:31:18 |    73.4 |
| 380008017037ED10 | 2013-08-02 12:31:18 |    79.7 |
+------------------+---------------------+---------+

データをフォーマットしてテーブルにプルできるSQLクエリがあり、それをJSONに変換して視覚化のためにWebブラウザーに渡します。ストアド プロシージャを使用してタイミング間隔を変更しているため、少し異なりますが、これと似ています。

SELECT sensor_data.serial, sensor_data.dtg, sensor_data.reading, sensor.elevation,sensor.room, sensor.system FROM sensor_data, sensor WHERE sensor.serial = sensor_data.serial AND sensor_data.dtg BETWEEN NOW() - INTERVAL 1 MINUTE AND NOW();

結果はこんな感じ

+------------------+---------------------+---------+-----------+-------+--------+
| serial           | dtg                 | reading | elevation | room  | system |
+------------------+---------------------+---------+-----------+-------+--------+
| 2D0008017075F210 | 2013-08-02 12:34:39 |    98.6 |         5 | 2B211 | test   |
| 2D0008017075F210 | 2013-08-02 12:34:49 |    98.6 |         5 | 2B211 | test   |
| 2D0008017075F210 | 2013-08-02 12:34:59 |    98.6 |         5 | 2B211 | test   |
| 2D0008017075F210 | 2013-08-02 12:35:09 |    98.6 |         5 | 2B211 | test   |
| 2D0008017075F210 | 2013-08-02 12:35:19 |    98.6 |         5 | 2B211 | test   |
| 2D0008017075F210 | 2013-08-02 12:35:29 |    98.6 |         5 | 2B211 | test   |
| 1D00080170496D10 | 2013-08-02 12:34:39 |    73.4 |         5 | 2B211 | test   |
| 1D00080170496D10 | 2013-08-02 12:34:49 |    73.4 |         5 | 2B211 | test   |
| 1D00080170496D10 | 2013-08-02 12:34:59 |    73.4 |         5 | 2B211 | test   |
| 1D00080170496D10 | 2013-08-02 12:35:09 |    73.4 |         5 | 2B211 | test   |
| 1D00080170496D10 | 2013-08-02 12:35:19 |    73.4 |         5 | 2B211 | test   |
| 1D00080170496D10 | 2013-08-02 12:35:29 |    73.4 |         5 | 2B211 | test   |
| 380008017037ED10 | 2013-08-02 12:34:39 |    79.7 |         5 | 2B211 | test   |
| 380008017037ED10 | 2013-08-02 12:34:49 |    79.7 |         5 | 2B211 | test   |
| 380008017037ED10 | 2013-08-02 12:34:59 |    79.7 |         5 | 2B211 | test   |
| 380008017037ED10 | 2013-08-02 12:35:09 |    79.7 |         5 | 2B211 | test   |
| 380008017037ED10 | 2013-08-02 12:35:19 |    79.7 |         5 | 2B211 | test   |
| 380008017037ED10 | 2013-08-02 12:35:29 |    79.7 |         5 | 2B211 | test   |
+------------------+---------------------+---------+-----------+-------+--------+

私がやりたいのは、たとえば 5 日間のレコードを取得し、上記のすべての情報を含む日ごとの平均気温を含む日ごとの行を持つ結果セットを返すステートメントを作成することです。現時点でのデータはすべて同じ温度であることはわかっていますが、実際には変動のないテスト環境にあります。DBA ではないので、ちょっと行き詰まっています。

4

1 に答える 1

0

datetime をフォーマットして時刻コンポーネントを取り除き、それによってグループ化する必要があります。

SELECT 
    sensor.serial,
    date_format(sensor_data.dtg, '%m/%Y/%d') as dtg_day,
    sensor.elevation,
    sensor.room, 
    sensor.system,
    avg(sensor_data.reading),
    count(1) reading_count
FROM 
    sensor
    NATURAL JOIN sensor_data
GROUP BY
    sensor.serial,
    dtg_day,
    sensor.elevation,
    sensor.room, 
    sensor.system

ここで SQLFiddle

于 2013-08-02T19:39:33.113 に答える