Reputation: 909
I have tried the following. It does not insert any new rows, although no rows are duplicate either. Why is that so? What do I do wrong? any help are appreciated
INSERT INTO TEMP_8
SELECT PASS_M, ENTRY_DT, EXIT_D, WORKED_HRS,
CONSECUTIVE_D = num -(SELECT max(num)
FROM TEMP_7 B
WHERE B.CONSEC <= A.CONSEC
AND B.GAP = 1
AND A.IC_N = B.IC_N) + 1
FROM TEMP_7 A
WHERE NOT EXISTS (SELECT *
FROM TEMP_8);
Update:
PASS_M ENTRY_DT, EXIT_DT, WORKED_HRS
peter 20/12/12 21/12/12 12
Tom 20/12/12 21/12/12 10
Tom 21/12/12 22/12/12 9
These are not duplicates. A duplicate is when the name
, entry_dt
and exit_dt
is exactly the same.
Upvotes: 0
Views: 1483
Reputation: 735
You need to filter the Exists with the data in select as follows:
INSERT INTO TEMP_8
SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS,
CONSECUTIVE_D = num -(SELECT max(num)
FROM TEMP_7 B
WHERE B.CONSEC <= A.CONSEC
AND B.GAP = 1
AND A.IC_N = B.IC_N) + 1
FROM TEMP_7 A
WHERE NOT EXISTS (SELECT 1
FROM TEMP_8 T
WHERE A.PASS_M=T.PASS_M AND A.ENTRY_DT=T.ENTRY_DT AND A.EXIT_DT=T.EXIT_DT);
Upvotes: 1
Reputation: 902
INSERT INTO TEMP_8
SELECT PASS_M, ENTRY_DT, EXIT_D, WORKED_HRS,
CONSECUTIVE_D = num -(SELECT max(num)
FROM TEMP_7 B
WHERE B.CONSEC <= A.CONSEC
AND B.GAP = 1
AND A.IC_N = B.IC_N) + 1
FROM TEMP_7 A
WHERE NOT EXISTS (SELECT *
FROM TEMP_8 B
WHERE B.PASS_M = A.PASS_M
and B.ENTRY_DT = A.ENTRY_DT
and B.EXIT_D = A.EXIT_D);
Upvotes: 2