我正在编写一个 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
第二个使用 rank 来完成相同的结果:
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 在排序之前起作用,这就是我首先在子选择中进行排序的原因。
但是,我不确定我是否错过了这个想法?
我还想知道在这种情况下排名是否是首选/最佳实践,或者可能更好地传达查询的意图?