在Oracle中,LAG函數用于獲取分區或排序后的前一行數據
以下是一個示例:
WITH data AS (
SELECT empno, deptno, sal,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY empno) as row_num
FROM emp
),
lag_data AS (
SELECT empno, deptno, sal, row_num,
LAG(empno) OVER (PARTITION BY deptno ORDER BY row_num) as prev_empno,
LAG(sal) OVER (PARTITION BY deptno ORDER BY row_num) as prev_sal
FROM data
)
SELECT empno, deptno, sal,
CASE WHEN empno = prev_empno AND sal = prev_sal THEN '重復' ELSE '非重復' END as duplicate_status
FROM lag_data;
在這個示例中,我們首先使用ROW_NUMBER()函數為每個部門的員工分配一個唯一的行號。然后,我們使用LAG函數獲取前一行的員工編號和薪水。最后,我們比較當前行和前一行的員工編號和薪水,以確定是否存在重復。
請注意,這個示例僅適用于具有相同部門和薪水的連續重復行。如果需要處理非連續重復行,可以考慮使用其他方法,例如使用窗口函數(如DENSE_RANK())或自定義聚合函數。