對于每個類別(列名稱),已排序的行(按列 dt)之間存在依賴關系,例如行 i 上的 End_am = 行 i 1 上的 Start_am。
CREATE TABLE table_name (Name,dt,Start_am,End_am) AS
SELECT 'A', DATE '2000-01-04', FLOAT 0, FLOAT 20 FROM DUAL UNION ALL
SELECT 'A', DATE '2000-01-05', FLOAT 20, FLOAT 0 FROM DUAL UNION ALL
SELECT 'A', DATE '2000-01-08', FLOAT 0, FLOAT 15 FROM DUAL UNION ALL
SELECT 'A', DATE '2000-01-10', FLOAT 15, FLOAT 25 FROM DUAL UNION ALL
SELECT 'A', DATE '2000-01-11', FLOAT 333, FLOAT 25 FROM DUAL UNION ALL
SELECT 'A', DATE '2000-01-12', FLOAT 25, FLOAT 25 FROM DUAL UNION ALL
SELECT 'B', DATE '2001-02-05', FLOAT 1, FLOAT 2 FROM DUAL UNION ALL
SELECT 'B', DATE '2001-02-09', FLOAT 2, FLOAT 2 FROM DUAL UNION ALL
SELECT 'B', DATE '2001-02-10', FLOAT 2, FLOAT 0 FROM DUAL UNION ALL
SELECT 'B', DATE '2001-02-11', FLOAT 0, FLOAT 0 FROM DUAL UNION ALL
SELECT 'B', DATE '2001-02-12', FLOAT 0, FLOAT -1 FROM DUAL UNION ALL
SELECT 'B', DATE '2001-02-13', FLOAT -1, FLOAT 0 FROM DUAL UNION ALL
SELECT 'B', DATE '2001-02-14', FLOAT 0, FLOAT 0 FROM DUAL;
在上面的示例中,名稱 B 的資料是一致的,而名稱 A 在 2000 年 1 月 11 日不匹配(起始金額 333 與前一天結束金額 25)。
是否可以簽入sql?
uj5u.com熱心網友回復:
我們可以在LAG()這里使用決議函式:
WITH cte AS (
SELECT t.*, LAG(End_am, 1, Start_am) OVER (PARTITION BY Name ORDER BY dt) AS End_am_lag
FROM table_name t
)
SELECT Name, dt, Start_am, End_am
FROM cte
WHERE Start_am <> End_am_lag;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/508622.html
標籤:sql甲骨文依赖关系
