根据前一行条目的值更新整个表的行

时间:2017-09-20 09:54:35

标签: sql sqlite

我想通过搜索同一ITEM的前一个(前触发日期)的值来更新当前行的Cnt_Per_Item,并添加+1或-1。 Cnt_Per_Item +1 if fault(Cnt_Per_Item-1如果ok) 我找到了一些查询上一行或下一行的查询,但我只得到单输出。现在我想更新整个表格。 Cnt_Per_Item现在的默认值为NULL。 (40.000-条目和增长。) [示例表应如何工作] [1]
    ITEM       | trigger                        | Fault/OK     Cnt_Per_Item

    |1          |2016-04-08 11:49:15.483          |Fault          |5|
    |2          |2016-04-08 12:49:15.383          |Fault          |1|
    |4          |2016-05-08 11:49:15.723          |Fault          |1|
    |2          |2016-07-09 00:49:15.503          |Fault          |2|
    |1          |2016-04-08 11:50:24.103          |OK             |4|
    |1          |2016-08-08 13:06:35.157          |Fault          |5|
    |1          |2016-08-11 13:06:35.277          |Fault          |6|

1 个答案:

答案 0 :(得分:1)

如果您有一张大桌子,这将效率不高。但是你可以用相关的子查询来做到这一点:

update t
    set cnt_per_item = coalesce( (select sum(case when fault_ok = 'fault' then 1 else -1 end)
                                  from t t2
                                  where t2.item = t.item and t2.trigger <= t.trigger
                                 ), 0);