不在Oracle子查询中工作的顺序

Nic*_*ick 2 sql oracle

我想从今天的日期开始从表中返回7个事件,并按日期顺序排列:

SELECT ID
FROM table
 where ID in (select ID from table
where DATEFIELD >= trunc(sysdate)
order by DATEFIELD ASC)
and rownum <= 7
Run Code Online (Sandbox Code Playgroud)

如果我删除'order by',它会返回ID并且查询有效,但它的顺序不正确.感谢任何帮助,因为我似乎无法弄清楚我做错了什么!

(编辑)为了澄清,我之前使用过这个,退回的订单真的出来了:

select ID
from TABLE
where DATEFIELD >= trunc(sysdate)
and rownum <= 7
order by DATEFIELD 
Run Code Online (Sandbox Code Playgroud)

谢谢

a_h*_*ame 10

在处理ORDER BY 之前ROWNUM应用"函数" 的值.这就是为什么它不能像你使用它一样工作(请参阅手册以获得类似的解释)

当使用ROWNUM和ORDER BY 限制查询时,必须在内部选择中完成排序,并且必须在外部选择中应用限制:

select *
from (
  select *
  from table
  where datefield >= trunc(sysdate)
  order by datefield ASC
)
where rownum <= 7
Run Code Online (Sandbox Code Playgroud)