Sqlite
如何在更新語句中使用視窗函式?
我有一個簡單的 SQL 模式(SQLite),具有以下定義:
tbl_data (`id` INTEGER, `value` INTEGER, `result` INTEGER);
它有一些記錄(範例):
如果value>10並且如果前面沒有包含value>10的行,我想更新此表以設置result=1。
前面的限制應該是2,並且 order 是id。
所以期望的目標是有這個:
這是我的遊樂場:https ://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=5b1cfa5d4b4c78bd31f7427eca20b0b5
我需要更新的實際表包含 >800k 行,因此效率很重要。
我怎樣才能做到這一點?
with cte1 as ( select id, value, lag(value,1,0) over w as prev1, lag(value,2,0) over w as prev2 from tbl_data window w as (order by id) ), cte2 as ( select id from cte1 where value > 10 and prev1 <= 10 and prev2 <= 10 ) update tbl_data set result = 1 where id in (select id from cte2);