0
考慮下面的Oracle數據庫表:如何在Oracle表中的列中移動值?
group revision comment 1 1 1 1 2 2 1 null null 2 1 1 2 2 2 2 3 3 2 4 4 2 null null 3 1 1 3 2 2 3 3 3 3 null null
我要評論欄就該一步向下調節,版本,其組內,使我得到如下表:
group revision comment 1 1 null 1 2 1 1 null 2 2 1 null 2 2 1 2 3 2 2 4 3 2 null 4 3 1 null 3 2 1 3 3 2 3 null 3
我有以下查詢:
MERGE INTO example_table t1 USING example_table t2 ON ( (t1.revision = t2.revision+1 OR (t2.revision = ( SELECT MAX(t3.revision) FROM example_table t3 WHERE t3.group = t1.group ) AND t1.revision IS NULL) ) AND t1.group = t2.group) WHEN MATCHED THEN UPDATE SET t1.comment = t2.comment;
這樣做大部分(仍然需要一個單獨的查詢來覆蓋修訂= 1),但它是非常緩慢。
所以我的問題是,我如何儘可能有效地使用Max來爲每個組拉出最高版本?
呀,這似乎工作。 所以這個答案加上這個http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions001.htm#SQLRF06174(關於分析函數的部分)幫了我很多。 –
UPDATE語句不起作用 - WITH子句不能在UPDATE之前,它需要在UPDATE之後。在MERGE的ON條件下使用NVL是有風險的 - 如果0是修改的合理值之一,那該怎麼辦?最好寫「或者u.revision爲null,v.revision爲null」。 (事實上,如果桌子有主鍵,情況會更好!)否則,這是正確的答案,很好! – mathguy
@mathguy當然不會。建立答案時,這只是我的混亂。正確的答案是合併而不是更新。 – Kacper