I’m trying to return 7 events from a table, from todays date, and have them in date order:
SELECT ID
FROM table
where ID in (select ID from table
where DATEFIELD >= trunc(sysdate)
order by DATEFIELD ASC)
and rownum <= 7
If I remove the ‘order by’ it returns the IDs just fine and the query works, but it’s not in the right order. Would appreciate any help with this since I can’t seem to figure out what I’m doing wrong!
(edit) for clarification, I was using this before, and the order returned was really out:
select ID
from TABLE
where DATEFIELD >= trunc(sysdate)
and rownum <= 7
order by DATEFIELD
Thanks
The values for the
ROWNUM“function” are applied before the ORDER BY is processed. That why it doesn’t work the way you used it (See the manual for a similar explanation)When limiting a query using
ROWNUMand an ORDER BY is involved, the ordering must be done in an inner select and the limit must be applied in the outer select: