Oracle rownum返回错误的结果

Adi*_*tya 4 sql oracle

我正在尝试查询只返回表中的最新行.

最初我在查询中使用了max(id)但是因为我使用了序列而我的集合是聚集的,所以我不能依赖序列作为它的乱序.所以我决定根据创建时间进行排序,并使用rownum选择顶行.

我用了类似的东西

SELECT  A.id
    FROM Table_A, Table_B B
    WHERE A.status = 'COMPLETED'
    AND B.name = 'some_name'
    AND A.id = B.id
    AND rownum = 1
    order by A.Creation_Time;
Run Code Online (Sandbox Code Playgroud)

这有些怎么回事我说42145有些错误的结果.如果我删除了rownum condtn,那么最高记录就是45343;

Gor*_*off 8

使用rownumorder by,需要使用子查询.这与评价的顺序做whereorder by.所以,试试这个:

SELECT t.*
FROM (SELECT A.id
      FROM Table_A JOIN 
           Table_B B
           ON A.id = B.id
      WHERE A.status = 'COMPLETED' AND B.name = 'some_name'
      ORDER BY A.Creation_Time
     ) ab
WHERE rownum = 1;
Run Code Online (Sandbox Code Playgroud)

我应该补充:Oracle 12支持fetch first 1 row only,这更方便:

  SELECT A.id
  FROM Table_A JOIN 
       Table_B B
       ON A.id = B.id
  WHERE A.status = 'COMPLETED' AND B.name = 'some_name'
  ORDER BY A.Creation_Time
  FETCH FIRST 1 ROW ONLY;
Run Code Online (Sandbox Code Playgroud)