Полагаю, вам просто нужно изменить свою логику.Вы можете использовать NOT EXISTS
:
select h1.employee_id, h1.leave_date, h1.no_of_days, h1.leave_state
from hr_holidays_by_calendar h1
where
h1.leave_state <> 'refuse'
and not exists (
select 1
from hr_holidays_by_calendar h2
where
h1.employee_id = h2.employee_id
and h1.leave_date = h2.leave_date
group by employee_id, leave_date
having count(*) > 1
)
. Это приведет к сбросу каждой пары (сотрудник, дата), где у них более одной строки (уход в один и тот же день).
Я не принял во внимание количество дней, так как это кажется неправильным в любом случае - вы не можете получить отпуск дважды в один и тот же день, который длится разное количество дней.Если ваше приложение это позволяет, подумайте о применении дополнительной логики.Кроме того, вы не должны допускать попадания этих записей в таблицу: -)