MERGE INTO uf_AttendanceList_dt1 a USING ( SELECT a1.id, LEAD(TO_DATE(a1.EFF_DATE, 'YYYY-MM-DD')) OVER (PARTITION BY a1.mainid ORDER BY TO_DATE(a1.EFF_DATE, 'YYYY-MM-DD')) AS NEXT_EFF_DATE FROM uf_AttendanceList_dt1 a1 ) t ON (a.id = t.id) WHEN MATCHED THEN UPDATE SET a.EXP_DATE = TO_CHAR(t.NEXT_EFF_DATE - 1, 'YYYY-MM-DD') WHERE t.NEXT_EFF_DATE IS NOT NULL;