あなたはこのようなことをすることができます
insert into readings (sensor_id, sensor_reading, time_of_reading)
select 42, 1234.5678, current_timestamp
from readings
where not exists (select *
from readings
where sensor_reading = 1234.5678
and time_of_reading = (select max(time_of_reading)
from readings
where sensor_id = 42);
これにはsensor_reading
列にインデックスを付ける必要がありますが、実際に高速になるかどうかはまだ疑問です。
haschanged
データの取得中に計算できるため、属性を保存する必要はありません。
select sensor_id,
sensor_reading,
time_of_reading,
lag(sensor_reading) over (partition by sensor_id order by time_of_reading) = sensor_reading as has_changed
from readings;
これは、それが実際には一意ではないことを前提としてsensor_id
います。そうでなければ、センサーの複数の読み取り値を保存できませんでした
さらに、使用する値が正確ではないため、そのREAL
列を列に変更することを前提としています(実際には、最初から格納が正確ではありません)。NUMERIC
REAL
=