Select из таблицы с учётом записей другого типа из этой же таблицы
Есть таблица Event со следующей структурой:
- id
- client_id
- event_type_id
- date_time_column
Нужно получить все записи, у которых дата в определённом интервале и event_type_id = 5. Но! Если в этой же таблице event для того же самого client_id есть ещё и записи с типом 10, то нужно получить не все записи типа 5, а только те, у которых дата новее, чем дата самой поздней записи типа 10. Как это уместить в один запрос?
Я пришёл к такому запросу:
SELECT max(e2.id) as e2id, max(e2.CLIENT_ID), max(e2.DATE_TIME_COLUMN) as e2date, e.*
FROM EVENT e
left join EVENT e2
ON e2.CLIENT_ID = e.CLIENT_ID
AND e2.EVENT_TYPE_ID IN (10)
AND e2.DATE_TIME_COLUMN BETWEEN IN_DATE_START AND IN_DATE_END
WHERE E.DATE_TIME_COLUMN BETWEEN IN_DATE_START AND IN_DATE_END
AND e.CLIENT_ID is not null
AND e.EVENT_TYPE_ID IN (5)
and ( e2.DATE_TIME_COLUMN is null or e.DATE_TIME_COLUMN >= e2.DATE_TIME_COLUMN)
group by e.id
ORDER BY e.CLIENT_ID, e.DATE_TIME_COLUMN
К сожалению, этот запрос работает не так, как надо. Если в таблице для одного клиента пять записей типа 10, то запрос выдаёт и пять записей типа 5 (каждая из которых новее одной из записей типа 10). А мне нужны только те, что после одной, самой поздней записи типа 10.