簡體   English   中英

比較同一張表的2行中的同一列

[英]Compare the same column in 2 rows of a same table with each other

我正在使用 oracle 數據庫,並且我有下表包含文檔數據。 我可以添加具有不同修訂版的相同文檔。 這樣鍵將是 doc_id 和修訂。 給定文檔可以有盡可能多的修訂。

doc_id 修訂 數據
一個 1 測試1
一個 2 測試2
一個 3 測試3
1 新的1
2 新的2

我想創建一個視圖,將數據列與文檔的每個修訂進行比較。 視圖的 output 應如下所示。

doc_id 比較修訂 舊數據 新數據
一個 1-2 測試1 測試2
一個 1-3 測試1 測試3
一個 2-3 測試2 測試3
1-2 新的1 新的2

請幫助我創建這樣的視圖。 如果給定的數據集無法做到這一點,請建議我一個解決方法。 提前致謝。

您可以使用分層查詢來做到這一點(無需執行自聯接或掃描表兩次):

SELECT doc_id,
       PRIOR revision || '-' || revision AS compared_revision,
       PRIOR data AS old_data,
       data AS new_data
FROM   table_name
WHERE  LEVEL = 2
CONNECT BY
       PRIOR doc_id   = doc_id
AND    PRIOR revision < revision

其中,對於樣本數據:

CREATE TABLE table_name ( doc_id, revision, data ) AS
SELECT 'A', 1, 'test1' FROM DUAL UNION ALL
SELECT 'A', 2, 'test2' FROM DUAL UNION ALL
SELECT 'A', 3, 'test3' FROM DUAL UNION ALL
SELECT 'B', 1, 'new1' FROM DUAL UNION ALL
SELECT 'B', 2, 'new2' FROM DUAL;

輸出:

 文檔 ID |  COMPARED_REVISION | 舊數據 |  NEW_DATA:----- |:---------------- |:-------- |:------- A |  1-2 | 測試1 | 測試2 A |  1-3 | 測試1 | 測試3 A |  2-3 | 測試2 | 測試3 B |  1-2 | 新1 | 新的2

db<> 在這里擺弄

這看起來像一個簡單的自聯接:

select t1.doc_id, (t1.revision || '-' || t2.revision) as compared_revision, t1.data, t2.data
from t t1 join
     t t2
     on t1.doc_id = t2.doc_id and t1.revision < t2.revision
order by t1.doc_id, compared_revision;

是一個 db<>fiddle。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM