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 优化的主要内容,如果未能解决你的问题,请参考以下文章

从 100 万行表中优化插入最大日期

优化日期之间的选择

从多个表中获取 MAX 日期时间事件,并按 ID 输出最近事件的简单列表

min/max优化,count ,group by

pandas 日期数据处理大全,按照年、季度、月、周、日筛选数据

Mysql 优化 MIN、MAX 和 SUM 的索引开销