3 回答
TA贡献1860条经验 获得超9个赞
该where声明被执行之前的order by。因此,您所需的查询是说“ 先行,然后按 t_stamp desc 排序 ”。那不是您想要的。
子查询方法是在Oracle中执行此操作的正确方法。
如果要在两个服务器上都可以使用的版本,可以使用:
select ril.*
from (select ril.*, row_number() over (order by t_stamp desc) as seqnum
from raceway_input_labo ril
) ril
where seqnum = 1
外部*将在最后一列中返回“ 1”。您可能需要单独列出各列以避免这种情况。
TA贡献1844条经验 获得超8个赞
使用ROW_NUMBER()代替。ROWNUM是一个伪列,ROW_NUMBER()是一个函数。您可以了解它们之间的差异,并查看以下查询的输出差异:
SELECT * FROM (SELECT rownum, deptno, ename
FROM scott.emp
ORDER BY deptno
)
WHERE rownum <= 3
/
ROWNUM DEPTNO ENAME
---------------------------
7 10 CLARK
14 10 MILLER
9 10 KING
SELECT * FROM
(
SELECT deptno, ename
, ROW_NUMBER() OVER (ORDER BY deptno) rno
FROM scott.emp
ORDER BY deptno
)
WHERE rno <= 3
/
DEPTNO ENAME RNO
-------------------------
10 CLARK 1
10 MILLER 2
10 KING 3
- 3 回答
- 0 关注
- 2073 浏览
添加回答
举报