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.


Ответы (0 шт):