Oracle 8 uso del Rownum

July
18 de Agosto del 2005
Chicos estoy necesitando que me ayuden con un select porque no m devuelve lo que corresponde:

El caso es el siguiente, con esta consulta me dan los siguientes resultados:

SQL> select to_char(as_fec_rem, 'yyyy') as ano,
2 to_char(as_fec_rem, 'mm') as mes,
3 sum(as_mon_rem) as monto
4 from asistencia
5 where id_depart = 23 and id_locali = 00389 and id_cod_asi = '04'
6 group by to_char(as_fec_rem, 'yyyy'), to_char(as_fec_rem, 'mm')
7 order by 1 desc, 2 desc;

ANO MES MONTO
---- -- ---------
2005 06 27357
2005 05 24286.36
2005 04 23303.84
2005 03 21763.37
2005 02 20636.77
2004 12 39807.95
2004 11 19780.41
2004 10 20515.32
2004 09 19689.65
2004 08 20049.92
2004 07 22510.06
2004 06 26297.72
2004 05 16996.25
2004 04 19183
2004 03 18682.59
2004 02 18394.24

16 rows selected.

Si yo quiero seleccionar los primeros 12 registros uso el Rownum <= 13 y me da lo siguiente:

SQL> select to_char(as_fec_rem, 'yyyy') as ano,
2 to_char(as_fec_rem, 'mm') as mes,
3 sum(as_mon_rem) as monto
4 from asistencia
5 where id_depart = 23 and id_locali = 00389 and id_cod_asi = '04' and rownum <= 13
6 group by to_char(as_fec_rem, 'yyyy'), to_char(as_fec_rem, 'mm')
7 order by 1 desc, 2 desc;

ANO ME MONTO
---- -- ---------
2005 06 27357
2005 05 24286.36
2005 04 23303.84
2005 03 21763.37
2005 02 20636.77
2004 12 39807.95
2004 11 19780.41
2004 10 20515.32
2004 09 19689.65
2004 08 20049.92
2004 03 18682.59
2004 02 18394.24

12 rows selected.


Como veran en lugar de traer como su orden lo indica los registros:

2005/06
2005/05
2005/04
2005/03
2005/02
2004/12
2004/11
2004/10
2004/09
2004/08
2004/07
2004/06

en lugar de 2004/07 y 2004/06 me trae 2004/03 y 2004/02, es como que saca registros del medio.

Yo necesito mostrar de la manera correcta es decir los meses 06 y 07.

Como puedo lograrlo??

Saludos y muchas gracias.

nerea
18 de Agosto del 2005
Lo que pasa es que primero hace el rownum<=13, lo cual te saca 12 registros cualquiera, y desués se realiza la ordenación de esos 12 registros.
Si quieres primero ordenar todos los registros y luego quedarte con los 12 primeros:

select ano, mes, monto
from (select
to_char(as_fec_rem, 'yyyy') as ano,
to_char(as_fec_rem, 'mm') as mes,
sum(as_mon_rem) as monto
from asistencia
where id_depart = 23 and id_locali = 00389 and id_cod_asi = '04'
group by to_char(as_fec_rem, 'yyyy'), to_char(as_fec_rem, 'mm')
order by 1 desc, 2 desc
)
where rownum <= 13

July
18 de Agosto del 2005
Lo probé y me da el error:

ORA-000907 - Missing right parenthesis

Que será?

nerea
18 de Agosto del 2005
¿has copiado bien la sentencia? porque no veo que falte ningún paréntesis:

select ano, mes, monto
from (select
to_char(as_fec_rem, 'yyyy') as ano,
to_char(as_fec_rem, 'mm') as mes,
sum(as_mon_rem) as monto
from asistencia
where id_depart = 23 and id_locali = 00389 and id_cod_asi = '04'
group by to_char(as_fec_rem, 'yyyy'), to_char(as_fec_rem, 'mm')
order by 1 desc, 2 desc
)where rownum <= 13;