删除时间序列数据中的冗余值

时间:2015-09-25 21:58:16

标签: sql sqlite

考虑这样的数据库方案:

CREATE TABLE log (
    observation_point_id INTEGER PRIMARY KEY NOT NULL,
    datetime TEXT NOT NULL,
    value REAL NOT NULL
)

包含某些值的“观察”;比如说温度测量。观察装置(即温度计:)每隔5秒对温度进行采样,并将其记录到数据库中。

有多个温度计,每个温度计都是通过'observation_point'来识别的(为了这个简化的例子)。

现在,让我们假设我的温度计的精度是一度;那么我会有许多冗余的观察。假设我在9h00m00s处记录x度,那么它很可能在9h00m05s,9h00m10s等处仍然是x度。所以我只需要存储我第一次测量这个温度的值和时间,以及我上次测量它的时间

如果紧接在它之前的值是多余的,我可以检查每个插入,然后删除它。但这非常昂贵,特别是考虑到有很多记录器要写入我的数据库,并且在我的实际用例中记录的频率高于5秒。

所以我的想法是每隔1分钟运行一次'清理',它将删除极值e1和e2之间的所有值,其中间隔[e1,e2]被定义为每个后续值v1,v2,...的系列。 ..,vn其中v1 = v2 = ... = vn。 '后续'在这里意味着按'datetime'排序。

我的问题:有没有办法在SQL查询中表达这一点?还有另一种方法可以解决这个问题吗?

(我的基线是'按'选择',然后遍历所有结果)。在我的值到达数据库之前,我无法做任何事情(即缓存值,直到我得到下一次测量,如果测量值不同,则只写入值),因为我也可能以比每次测量更低的频率进行观察几秒钟,我不能失去观察。 (现在我输入了这个,也许我可以在一个单独的数据库表中'缓存'值,但我认为我现在偏离了我真正的问题太远了。)

0 个答案:

没有答案