【发布时间】:2010-01-21 20:22:54
【问题描述】:
有什么更优雅的方法:
select date from table where id in (
select max(id) from table);
肯定有更好的方法...
【问题讨论】:
标签: sql oracle query-optimization
有什么更优雅的方法:
select date from table where id in (
select max(id) from table);
肯定有更好的方法...
【问题讨论】:
标签: sql oracle query-optimization
您可以使用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;
哪种解决方案最好取决于表中的索引以及数据的数量和分布。您应该测试每个解决方案,以确定最有效、最快、最灵活满足您的需求等。
【讨论】:
select date from (select date from table order by id desc)
where rownum < 2
假设您的 ID 是唯一的。
编辑:使用子查询 + rownum
【讨论】: