少数のセンサーから10秒間隔でデータを取得するアプリケーションを開発しています。これらの値は、単一テーブルのsqliteデータベースに保存されます。
このアプリケーションの1つの使用例は、読み取られた各センサーの1日の最大値を印刷することです。
MAX...GROUP BY day
これらの値を取得するたびにlikeクエリを発行するというアイデアは好きではないので、毎日の最大値を含む2番目のテーブルを維持することを考えました。
- これはそのようなタスクを実行するための適切な方法ですか?
そのようなトリガーを書いてみましたが、うまくいきませんでした。新しい値と、すでにデータベースにある現在の時間の値を比較する機能がどういうわけか欠けています(新しい時間が始まったばかりの場合は値がない可能性があります)
CREATE TRIGGER update_maxima AFTER INSERT ON tick BEGIN INSERT OR REPLACE INTO maxima (time, device_id, lW) VALUES ( strftime('%Y-%m-%d 00:00:00', 'now') , new.device_id, (select case when new.lW > (select lW from maxima where device_id = new.device_id AND time = strftime('%Y-%m-%d 00:00:00', 'now')) then new.lW else (select lW from maxima where device_id = new.device_id AND time = strftime('%Y-%m-%d 00:00:00', 'now')) end ) ); END