我試圖在Oracle中使用DENSE_RANK()函數作爲將任意「主鍵」連接到唯一數據分組的方式。我的數據集是過去幾天在不同「地點」針對不同「資產」執行的交易清單。數據集由ASSET ASC,DATE ASC預先訂購,如下所示。Oracle DENSE_RANK()
ASSET LOCATION DATE
A LOC_A 9/1/2017
A LOC_A 9/1/2017
A LOC_B 9/5/2017
A LOC_B 9/7/2017
A LOC_A 9/11/2017
B LOC_A 8/22/2017
B LOC_C 8/25/2017
B LOC_C 8/26/2017
B LOC_A 9/2/2017
B LOC_A 9/3/2017
當我使用DENSE_RANK()OVER(ORDER BY資產,位置),我得到下面的輸出:
ASSET LOCATION DATE ACTUAL
A LOC_A 9/1/2017 1
A LOC_A 9/1/2017 1
A LOC_B 9/5/2017 2
A LOC_B 9/7/2017 2
A LOC_A 9/11/2017 1
B LOC_A 8/22/2017 3
B LOC_C 8/25/2017 4
B LOC_C 8/26/2017 4
B LOC_A 9/2/2017 3
B LOC_A 9/3/2017 3
不過,我試圖找出一種方式來獲得價值在這裏顯示的「預期」值:
ASSET LOCATION DATE ACTUAL EXPECTED
A LOC_A 9/1/2017 1 1
A LOC_A 9/1/2017 1 1
A LOC_B 9/5/2017 2 2
A LOC_B 9/7/2017 2 2
A LOC_A 9/11/2017 1 3
B LOC_A 8/22/2017 3 4
B LOC_C 8/25/2017 4 5
B LOC_C 8/26/2017 4 5
B LOC_A 9/2/2017 3 6
B LOC_A 9/3/2017 3 6
任何幫助在這方面的工作將不勝感激。
我的SQL是
SELECT ASSET, LOCATION, TXNDATE,
DENSE_RANK() OVER (ORDER BY ASSET, LOCATION) AS DENSERANK
FROM TEMPTABLE
ORDER BY ASSET, TXNDATE
,是的,我正在上面顯示的 「實際」 的結果。
你不應該得到這樣的結果。你確定你沒有使用'PARTITION BY'嗎? – Lamak
我的SQL是SELECT ASSET,LOCATION,TXNDATE,DENSE_RANK()OVER(ORDER BY ASSET,LOCATION)as DENSERANK TEMPTABLE ORDER BY ASSET,TXNDATE和yes,我得到上面顯示的「ACTUAL」結果。 – Nathan