使用触发器计算SQLite中行之间的差异

时间:2015-05-21 23:33:50

标签: sql sqlite triggers

给出这样的表结构:

ID|Measurement|Diff|Date

其中IDDate是复合主键,行由Date列进一步编入索引。

我想使用触发器(在insert or replace into之后)来计算表的Diff列。 Diff列只会记录同一Measurement的两个相邻日期之间ID值的差异。

在SQLite中执行此操作的最佳方式是什么?性能在这里至关重要,因为表很大,即1M +行。

1 个答案:

答案 0 :(得分:2)

计算值的查询应该是这样的:

update structure
    set new.diff = new.measurement - (select s.measurement
                                      from structure s
                                      where date < new.date
                                      order by date desc
                                      limit 1)
    where id = new.id;

update应使用主键索引来快速识别行。子查询应使用date索引快速查找上一行。所以,这应该有合理的表现。