Я пишу запрос Oracle, который должен получить самое последнее событие на основе даты, когда оно произошло.
У меня есть два запроса, которые, кажется, работают правильно в моих тестовых примерах.
Первый использует подзапрос для получения событий в порядке дат, а затем я просто извлекаю первую запись через rownum:
SELECT description FROM
(
SELECT description FROM tablename
WHERE ((event_type IN ('A','I','Y')) AND (meeting_date IS NOT NULL)
AND id='whatever')
ORDER BY meeting_date DESC
)
WHERE rownum = 1
Второй использует ранг для достижения того же результата:
SELECT description FROM
(
SELECT description, RANK() OVER( ORDER BY meeting_date DESC) mtg_rank
FROM tablename
WHERE ((event_type IN ('A','I','Y')) AND (meeting_date IS NOT NULL)
AND id= 'whatever')
)
WHERE mtg_rank = 1
Для меня предварительно отсортированный rownum достаточно прост, и я бы пошел с ним. Я понимаю, что rownum работает раньше, поэтому я сначала выполнил упорядочивание в подвыборке.
Однако я не уверен, что мне что-то не хватает с этой мыслью?
Мне также интересно, является ли ранжирование в этом случае предпочтительной / наилучшей практикой или, возможно, лучше передать смысл запроса?