次のデータ ギャップを見つけるクエリを作成する方法。
-- Scenario1 -- Query1 -- 同じテーブル内のギャップを見つける (例: tableb )
ID EFF_DT TERM_DT
800 6/15/2012 12:00:00.000 AM 10/14/2012 12:00:00.000 AM -- GAP
800 10/16/2012 12:00:00.000 AM 11/14/2012 12:00:00.000 AM
800 11/15/2012 12:00:00.000 AM 12/31/9999 12:00:00.000 AM
-- Scenario2 -- Query2 -- 2 つのテーブル ( tablea 、 tableb ) 間の不一致を見つける
-- tablea , sample data below
ID EFF_DT TERM_DT
400 6/15/2012 12:00:00.000 AM 10/14/2012 12:00:00.000 AM
400 11/15/2012 12:00:00.000 AM 12/31/9999 12:00:00.000 AM
500 6/15/2012 12:00:00.000 AM 10/14/2012 12:00:00.000 AM
500 10/15/2012 12:00:00.000 AM 11/14/2012 12:00:00.000 AM
500 11/15/2012 12:00:00.000 AM 12/31/9999 12:00:00.000 AM
-- tableb, sample data below
ID EFF_DT TERM_DT
400 6/15/2012 12:00:00.000 AM 10/13/2012 12:00:00.000 AM -- mismatch
400 11/15/2012 12:00:00.000 AM 12/31/9999 12:00:00.000 AM
500 6/15/2012 12:00:00.000 AM 11/14/2012 12:00:00.000 AM
500 11/15/2012 12:00:00.000 AM 12/31/9999 12:00:00.000 AM
-- Note 400 is a mismatch since ranges are different in both tables, 500 is okay (even though rows are split they still match )
-- Need to identify ID 400
テーブルには、最低日付が 1753 年 1 月 1 日、最高日付が 12/31/9999 の場合があります。
次のクエリを試しましたが、最初のシナリオで oracle エラーがスローされます。[ ORA-01841: (完全な) 年は -4713 から +9999 の間である必要があり、0 ではありません]
SELECT ID, TERM_DT AS gap_lower_bound, next_date AS gap_upper_bound
FROM (SELECT t.*,
LEAD (EFF_DT)
OVER (PARTITION BY ID ORDER BY EFF_DT)
next_date
FROM TABLEB t)
WHERE -- trim(next_date) is not null and
next_date > TERM_DT + 1
ありがとうございました。