Error en rownum

Jaime
02 de Julio del 2003
Hola a tod@s:

Quizá me podais ayudar con este problema que tengo. Estoy migrando la siguiente consulta a Oracle:

select top 12
f_mes f_mes,
des_mes desc_mes
from mes
where f_mes <= getdate()
order by f_mes desc

y la opcion mas acertada es:

SELECT *
FROM (SELECT f_mes f_mes, des_mes desc_mes
FROM MES
ORDER BY f_mes DESC)
WHERE ROWNUM <= 12

Pero cuando ejecuto esta consulta me da un error en la palabra "ORDER" del tipo:
ORA-00907: missing right parenthesis

alguien tiene alguna idea?
Muchas Gracias

pepito
02 de Julio del 2003
En vez de hacer eso haz esto:

SELECT f_mes f_mes, des_mes desc_mes
FROM MES
WHERE ROWNUM <= 12
ORDER BY f_mes DESC

espero te devuelva lo que deseas

nerea
02 de Julio del 2003
En la siguiente select:

SELECT *
FROM (SELECT f_mes f_mes, des_mes desc_mes
FROM MES
ORDER BY f_mes DESC)
WHERE ROWNUM <= 12

primero ordena y luego obtiene sólo 12 registros. Es decir la ordenación es sobre toda la tabla

en cambio en la consulta:

SELECT f_mes f_mes, des_mes desc_mes
FROM MES
WHERE ROWNUM <= 12
ORDER BY f_mes DESC

Primer obtiene 12 registros y ordena esos 12 registros.

Por tanto el resultado puede que no sea el mismo.

Lo que ocurre es que el ORDER BY en la SELECT de un FROM no está permitido en versiones de Oracle anteriores a 8i.

Si no tienes Oracle8i lo que puedes hacer es:
Quitar el ORDER BY y forzar a la subquery que vaya por índice:
- Creas un índice por f_mes en Descendente
- y la select sería:
SELECT *
FROM (SELECT distinct f_mes f_mes, des_mes desc_mes
FROM MES)
WHERE ROWNUM <= 12

Espero que te resuelva tu problema,...