前提
MySQLデータベースからデータを抽出し、Excelでグラフ化しようとしています。
Window関数を使ったりして悪戦苦闘しているのですが、なかなか思ったような出力結果になりません。
実現したいこと
table01
・epoch_sec(YYYYMMDD HH:MM:SS)
・sensor_id(sensor_mstとリンク)
・stay_time(秒)
データサンプル
epoch_sec sensor_id stay_time
20230113 08:30:00 A01 4
20230113 08:30:05 A01 2
20230113 08:30:13 B01 4
20230113 08:30:18 B01 1
20230113 08:35:00 A01 3
20230113 08:39:05 A01 4
20230113 08:39:25 C01 1
20230113 08:40:00 A01 5
20230113 08:41:00 A01 4
20230113 08:41:05 A01 5
20230113 08:41:10 A01 4
20230113 08:48:40 B01 5
20230113 08:48:50 A01 3
20230113 08:48:55 A01 4
20230113 08:59:25 C01 1
20230113 08:59:40 B01 5
1.動作要件
・エリアごとにセンサーがある。
・センサーが検知したら、5秒間ポーリングし、検知したものが存在したstay_timeと、そのsensor_idを出力。
2.集計したい内容
・8:00-18:00 の間で、10分刻みで最も多い(滞在時間が長い)sensor_idを出力し、
sensor_idごとに色分けして帯グラフで表示する。
⇒1日の滞在時間の割合を表現したい。
・データがない時間帯は空白or ゼロで出力。(可能であれば付けたい処理)
発生している問題・エラーメッセージ
10分ごとにMAX値を集計する部分も含めて、どのようなSQLで書けばよいか悩んでいます。 私のSQLはcountさせていますが、試行錯誤中によるものです。
該当のソースコード
MySQL
1SELECT 2min(DATE_FORMAT(FROM_UNIXTIME(p2.epoch_sec),'%Y-%m-%d %H:%i:%s')) as epoch_sec, 3sensor_id, 4count(*) as cnt, 5buff 6FROM ( 7SELECT p1.epoch_sec, p1.sensor_id 8 ,Row_Number() over(partition by p1.sensor_id order by p1.epoch_sec) rn 9 ,p1.epoch_sec-Row_Number() over(partition by p1.sensor_id order by p1.epoch_sec)+1 as buff 10FROM sample_db.table01 p1 11INNER JOIN sample_db.sensor_mst s ON p1.sensor_id = s.sensor_id 12WHERE DATE_FORMAT(FROM_UNIXTIME(p1.epoch_sec),'%Y%m%d') BETWEEN '20230110'AND '20230127' 13) p2 14GROUP BY sensor_id,buff 15ORDER BY buff,sensor_id
試したこと
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/14 15:07
2023/01/18 08:19
2023/01/18 13:14
2023/01/19 00:14
2023/01/19 00:58
2023/01/19 01:46
2023/01/19 04:12
2023/01/19 04:26