我正在尝试查询只返回表中的最新行.
最初我在查询中使用了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;
使用rownum时order by,需要使用子查询.这与评价的顺序做where和order 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)
| 归档时间: |
|
| 查看次数: |
1434 次 |
| 最近记录: |