There are multiple updates in the salary amount, hence duplicate data with same values but different salary. My task is to remove the duplicity and only show the latest salary update data.
The main problem with code is that it is showing duplicate data.
My Code is:
SELECT PER_PERSON_NAMES_F.TITLE,
PER_PERSON_NAMES_F.FIRST_NAME,
PER_PERSON_NAMES_F.LAST_NAME,
PER_PERSON_NAMES_F.FULL_NAME,
PER_ALL_PEOPLE_F.PERSON_NUMBER,
PER_NATIONAL_IDENTIFIERS.NATIONAL_IDENTIFIER_NUMBER,
PER_NATIONAL_IDENTIFIERS.LEGISLATION_CODE,
to_char(PER_ALL_PEOPLE_F.EFFECTIVE_START_DATE,'DD-MM-YYYY') AS EFFECTIVE_START_DATE,
to_char(PER_ALL_PEOPLE_F.EFFECTIVE_END_DATE,'DD-MM-YYYY') AS EFFECTIVE_END_DATE,
to_char(PER_PERSONS.DATE_OF_BIRTH,'DD-MM-YYYY') AS DOB,
PER_ALL_ASSIGNMENTS_M.ASSIGNMENT_TYPE,
PER_EMAIL_ADDRESSES.EMAIL_ADDRESS,
PER_PHONES.PHONE_NUMBER
FROM PER_ALL_PEOPLE_F JOIN PER_PERSONS ON PER_ALL_PEOPLE_F.PERSON_ID=PER_PERSONS.PERSON_ID JOIN PER_PERSON_NAMES_F ON
PER_PERSONS.PERSON_ID=PER_PERSON_NAMES_F.PERSON_ID JOIN PER_ALL_ASSIGNMENTS_M ON
PER_PERSON_NAMES_F.PERSON_ID=PER_ALL_ASSIGNMENTS_M.PERSON_ID JOIN PER_NATIONAL_IDENTIFIERS ON
PER_ALL_ASSIGNMENTS_M.PERSON_ID=PER_NATIONAL_IDENTIFIERS.PERSON_ID JOIN PER_EMAIL_ADDRESSES ON
PER_NATIONAL_IDENTIFIERS.PERSON_ID=PER_EMAIL_ADDRESSES.PERSON_ID JOIN
(
SELECT PERSON_ID,TRUNC(SALARY_AMOUNT,2) AS SALARY,max(LAST_UPDATE_DATE) as SALARY_UPDATE_DATE
FROM CMP_SALARY
GROUP BY PERSON_ID
) CMP_SALARY ON
PER_EMAIL_ADDRESSES.PERSON_ID=CMP_SALARY.PERSON_ID JOIN PER_PHONES ON CMP_SALARY.PERSON_ID = PER_PHONES.PERSON_ID
AND PER_NATIONAL_IDENTIFIERS.NATIONAL_IDENTIFIER_NUMBER IN (
SELECT DISTINCT NATIONAL_IDENTIFIER_NUMBER FROM PER_NATIONAL_IDENTIFIERS)
ORDER BY PER_ALL_PEOPLE_F.PERSON_NUMBER
How to remove duplicity in this code?
You may try the above to dedup the data , second solution if qualify is not supported.