我們有一個Oracle SQL查詢來標識表列的值從一個記錄更改爲另一個記錄的位置。相關的數據列是(ID,SOME_COLUMN,FROM_DATE,TO_DATE),其中ID不是唯一的,並且FROM_DATE和TO_DATE確定的時間間隔這對於該ID的特定行是有效的,即使用LAG/LEAD分析函數優化自我加入Oracle SQL查詢?
(ID1, VAL1, 01/01/2016, 03/01/2016)
(ID1, VAL2, 04/01/2016, 09/01/2016)
(ID1, VAL3, 10/01/2016, 19/01/2016)
等
我們可以實現這個使用下面的自聯接
SELECT N.ID
O.SOME_COLUMN OLD_VALUE,
N.SOME_COLUMN NEW_VALUE
FROM OUR_TABLE N, OUR_TABLE O
WHERE N.ID = O.ID
AND N.FROM_DATE - 1 = O.TO_DATE
AND N.SOME_COLUMN <> O.SOME_COLUMN
但是因爲表中包含100百萬的記錄,它相當擊中性能。有沒有更有效的方法來做到這一點?有人暗示了分析功能(例如LAG),但我們目前還找不到解決方案。任何想法,將不勝感激
你的問題不清楚。你的日期根本不重疊,並且你不清楚你想要的結果。 –
日期確實不重疊,它們表示時間間隔,在此期間屬於該ID的特定表格行有效。正如您在示例中看到的,間隔的FROM_DATE始終+1添加到上一個間隔的TO_DATE。我們需要結果,其中SOME_COLUMN的值已經從一個間隔改變到另一個間隔。實際上檢查你的下面的答案,你似乎已經正確解釋了一切。 – hammerfest