代码之家  ›  专栏  ›  技术社区  ›  David Oneill

最大id的日期:sql/oracle优化

  •  2
  • David Oneill  · 技术社区  · 15 年前

    更优雅的方法是什么:

    select date from table where id in (
      select max(id) from table);
    

    2 回复  |  直到 15 年前
        1
  •  2
  •   davek    15 年前
    select date from (select date from table order by id desc) 
    where rownum < 2
    

    假设您的ID是唯一的。

    编辑

        2
  •  3
  •   Bill Karwin    15 年前

    你可以使用 ROWNUM 伪柱。在查找第一行之前,必须使用子查询对结果进行排序:

    SELECT date 
    FROM (SELECT * FROM table ORDER BY id DESC)
    WHERE ROWNUM = 1;
    

    subquery factoring 在Oracle 9i及更高版本中,以以下方式:

    WITH ranked_table AS (
        SELECT ROWNUM AS rn, date
        FROM table
        ORDER BY id DESC
    )
    SELECT date FROM ranked_table WHERE rn = 1;
    

    SELECT date
    FROM table t1
    LEFT OUTER JOIN table t2
      ON t1.id < t2.id
    WHERE t2.id IS NULL;
    

    哪种解决方案最好取决于表中的索引以及数据的数量和分布。您应该测试每个解决方案,以确定什么最有效、最快、最灵活地满足您的需求,等等。