max id 的日期:sql/oracle 优化
Posted
技术标签:
【中文标题】max id 的日期:sql/oracle 优化【英文标题】:Date of max id: sql/oracle optimization 【发布时间】:2010-01-21 20:22:54 【问题描述】:有什么更优雅的方法:
select date from table where id in (
select max(id) from table);
肯定有更好的方法...
【问题讨论】:
【参考方案1】:您可以使用ROWNUM
伪列。子查询是在找到第一行之前对结果进行排序的必要条件:
SELECT date
FROM (SELECT * FROM table ORDER BY id DESC)
WHERE ROWNUM = 1;
您可以通过以下方式在 Oracle 9i 及更高版本中使用subquery factoring:
WITH ranked_table AS (
SELECT ROWNUM AS rn, date
FROM table
ORDER BY id DESC
)
SELECT date FROM ranked_table WHERE rn = 1;
您可以使用自连接,并查找不存在具有更大 id 的行:
SELECT date
FROM table t1
LEFT OUTER JOIN table t2
ON t1.id < t2.id
WHERE t2.id IS NULL;
哪种解决方案最好取决于表中的索引以及数据的数量和分布。您应该测试每个解决方案,以确定最有效、最快、最灵活满足您的需求等。
【讨论】:
嗯...我想我要发布另一个关于此的问题。我以前从未见过排名表。 对于任何对此投票的人,请参阅***.com/questions/2112891/… 我对此有一个后续问题,我认为单独使用它比尝试使用 cmets 更好......【参考方案2】:select date from (select date from table order by id desc)
where rownum < 2
假设您的 ID 是唯一的。
编辑:使用子查询 + rownum
【讨论】:
Oracle 对 rownum 的排序总是让我抓狂。 ://以上是关于max id 的日期:sql/oracle 优化的主要内容,如果未能解决你的问题,请参考以下文章
从多个表中获取 MAX 日期时间事件,并按 ID 输出最近事件的简单列表