Primero el ROWNUM y luego el ORDER BY

Hace poco realizé una consulta en Oracle para obtener los 10 primeros comprobantes ordenados por mes. Mi consulta fue algo así:



SELECT * FROM COMPROBANTE WHERE ROWNUM = 10
ORDER BY MES



Sin embargo, no me mostraba ordenado por mes.
Resulta que en Oracle primero se realiza el ROWNUM y luego el ORDER BY
Por lo que mi consulta tuvo que cambiar así:



SELECT * FROM
(SELECT * FROM
COMPROBANTE
ORDER BY MES)
WHERE ROWNUM = 10



Primero ordenar todo y luego cortar hasta el décimo registro.
Curioso....

Comentarios

Carlos Juan ha dicho que…
gracias muy bueno el artículo
carcasco ha dicho que…
si, pero el performance en el subquery es malisimo. si encuentro como te cuento.-
Anónimo ha dicho que…
Debiera ser WHERE ROWNUM <= 10, sino no traerá nunca ningún resultado.
Y lo del rendimiento (o performance) es falso. Más aún Oracle tiene una optimización especial para el rownum.
Leo.
ckomiya ha dicho que…
Gracias por el comentario
Marcelo ha dicho que…
Muchas gracias! me salvo el articulo a duda que tenia
Anónimo ha dicho que…
Esos ejemplos no los han probado porque devolverían solo el registro 10 en el orden. Deberían escribir no de memoria sino porque lo han probado antes.