【问题标题】:Use trigger to calculate difference between rows in SQLite使用触发器计算 SQLite 中的行之间的差异
【发布时间】:2015-08-03 20:23:26
【问题描述】:

给定这样的表结构:

ID|Measurement|Diff|Date

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

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

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

【问题讨论】:

    标签: sql sqlite triggers


    【解决方案1】:

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

    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 索引来快速找到上一行。所以,这应该有合理的性能。

    【讨论】:

    • 感谢您的回答。只是关于选择上一个日期的measurement 的子查询部分的一个问题,我们可以在那里指定id 的条件,而不是在更新语句的级别指定吗?如果是这样,我想知道性能是否有任何差异。这是为了我自己的理解。谢谢。
    • @skyork 。 . .您可以指定您喜欢的任何条件。对于上面的示例,出于性能原因,建议使用date 上的索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多