1

「 n分ごとにセンサーから受信したデータ」の単純な(読み取り:高速)スパークラインを描画しようとしています

データは非常に単純で、センサーの MAC アドレスによって識別される、特定のタイムスタンプの 1 つまたは複数の読み取り値です。

# SELECT mac, ants, read_at FROM normalized_readings LIMIT 10;
        mac        | ants |         read_at
-------------------+------+-------------------------
 f0:d1:a9:a0:fe:e7 |  -87 | 2013-07-14 09:25:15.215
 74:de:2b:fa:ca:cf |  -69 | 2013-07-14 09:25:14.81
 74:de:2b:fa:ca:cf |  -69 | 2013-07-14 09:25:14.81
 74:de:2b:fa:ca:cf |  -69 | 2013-07-14 09:25:15.247
 38:aa:3c:8f:a0:4f |  -85 | 2013-07-14 09:25:21.672
 38:aa:3c:8f:a0:4f |  -87 | 2013-07-14 09:25:21.695
 60:67:20:c8:bc:80 |  -83 | 2013-07-14 09:25:26.73
 60:67:20:c8:bc:80 |  -81 | 2013-07-14 09:25:26.737
 f0:d1:a9:a0:fe:e7 |  -83 | 2013-07-14 09:25:36.207
 f0:d1:a9:a0:fe:e7 |  -91 | 2013-07-14 09:26:07.77
(10 rows)

私は次のようなものを考え出そうとしています:

# SELECT 
    mac, date_trunc('minute', read_at) AS minute, COUNT(*) 
  FROM 
    normalized_readings
  GROUP BY mac, minute LIMIT 10;
        mac        |       minute        | count
-------------------+---------------------+-------
 00:08:ca:e6:a1:86 | 2013-07-14 16:22:00 |     6
 00:10:20:56:7c:e2 | 2013-07-27 05:29:00 |     1
 00:21:5c:1c:df:7d | 2013-07-14 09:44:00 |     1
 00:21:5c:1c:df:7d | 2013-07-14 09:46:00 |     1
 00:21:5c:1c:df:7d | 2013-07-14 09:48:00 |     1
 00:24:d7:b3:31:04 | 2013-07-15 06:51:00 |     1
 00:24:d7:b3:31:04 | 2013-07-15 06:53:00 |     3
 00:24:d7:b3:31:04 | 2013-07-15 06:59:00 |     3
 00:24:d7:b3:31:04 | 2013-07-15 07:02:00 |     3
 00:24:d7:b3:31:04 | 2013-07-15 07:06:00 |     3
(10 rows)

0しかし、すべての空の期間に注意してください。センサーがデータを記録していないことを示すために、それらの期間を抽出できるようにしたいと考えています。

おそらく、過去 12/24 時間分のデータのみを表示したいのでNOW()、過去 12/24 時間から各解像度(おそらく 1、または5 分)、読み取り値テーブルにクエリを実行し、読み取り値の数を合計する必要がありますが、これは非常に非効率に思えます。

力ずくでやろうとしていることを実行する方法はありますか? 私が見る限り、分を選択してグループ化すると、間違った側から自動的に来ますか?

4

1 に答える 1