【条件】
サーバ: Localhost via UNIX socket
ソフトウェア: MySQL
ソフトウェアバージョン: 5.0.96-log - Source distribution
プロトコルバージョン: 10
次のようなテーブルがあります。
id | registry_datetime | battery |
---|---|---|
1 | 2020-05-12 16:54:12 | 1.50 |
2 | 2020-05-12 16:54:42 | 1.50 |
3 | 2020-05-12 16:55:12 | 1.49 |
4 | 2020-05-12 16:55:52 | 1.49 |
id:連番
registry_datetime:登録日時(だいたい30秒毎)
battery:電圧
*1日に約3000レコード追加されます。
日付を範囲指定(例:2020/05/12 16:54 ~ 2020/05/13 16:54)して、
その間のデータをグラフ表示しています。
日付の指定は index.php 上に入力フォームを用意し、任意に設定可能としています。
グラフの表示はgoogle chartで行っています。
【問題点と対策】
日付の範囲によっては、データ数が膨大になってしまいます。
その対策として、表示件数を1000件固定とし、データを絞って取得しようと考えています。
やりたいことは、ここに記載されていることと同じですが、
PostgreSQLで一定間隔でスキップして取得
MySQLだとrow_number()が使えないので困りました。
また、既にある連番を利用した方が無駄がないと思い、
素人なりに次の方法を考えました。
- 2020/05/12 16:54 から 2020/05/13 16:54 までのデータ数を取得
- グラフ表示する間隔を計算 3000[データ数] / 1000[表示件数] = 3
- 先頭データのIDを取得
- IDと一致する registry_datetime と battery のデータを取得
- ID = ID + 3 とし1,4,7,11,14...番目のIDを指定する
- 4~5を1000回繰り返す
この手順を実現するSQL文の書き方がわかりません。
また、より良い方法があればご教示願います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/14 12:21