2017-09-20 165 views
0
我想通過搜索同一ITEM的前一個(之前的觸發日期)的值並添加+1或-1來更新當前行的Cnt_Per_Item。 Cnt_Per_Item +1如果錯誤(Cnt_Per_Item-1,如果沒問題) 我發現了一些用於搜索上一行或下一行的查詢,但我只得到單一輸出。現在我想更新整個表格。現在,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

如果你有一個大表,這不會是有效的。但是你可以用相關的子查詢來做到這一點:

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); 
+0

對不起,目前我無法顯示錶的一個小例子。 (也許它會顯示每一行都必須搜索前一行,並且在找到最近的日期後,必須記錄找到的行的計數器並用於更新當前行的值。 – markus1

相關問題