Isso retorna todas as linhas em que existe uma duplicata :
SELECT employee_id, leave_date, no_of_days, leave_state
FROM hr_holidays_by_calendar h
WHERE EXISTS (
SELECT -- select list can be empty for EXISTS
FROM hr_holidays_by_calendar
WHERE employee_id = h.employee_id
AND leave_date = h.leave_date
AND leave_state <> 'refuse'
AND ctid <> h.ctid
)
AND leave_state <> 'refuse'
ORDER BY employee_id, leave_date;
Não está claro onde
leave_state <> 'refuse'
deve aplicar. Você teria que definir os requisitos. Meu exemplo exclui linhas com leave_state = 'refuse'
(e leave_state IS NULL
com ele!) completamente. ctid
é o substituto de um homem pobre para sua chave primária não revelada (indefinida?). Relacionado:
- Como eu (ou posso) SELECT DISTINCT em várias colunas?
- O que é mais fácil de ler EXISTS subconsultas?