2008/12/23 Jaime Casanova <jcasa...@systemguards.com.ec>

> On Tue, Dec 23, 2008 at 8:29 PM, Julio Cesar Rodriguez Dominguez >
> >
> > postg...@contable[localhost]=# begin; create sequence s; select * from
> > (select nextval('s') as offset,idgrupo,grupo from (select idgrupo,grupo
> from
> > cc_grupos order by grupo) x ) xx where idgrupo=5;rollback;
> >
>
> postgres esta empujando los select internos hacia afuera, convirtiendo
> esto:
>
> select * from (select nextval('s') as offset,idgrupo,grupo
>                         from (select idgrupo,grupo
>                                     from cc_grupos order by grupo) x ) xx
> where idgrupo=5
>
>
> en esto:
>
> select nextval('s') as offset,idgrupo,grupo
>  from (select idgrupo,grupo from cc_grupos order by grupo) x
> where idgrupo=5
>
>
> si en cambio los escribes asi, hace lo que quieres:
>
> select * from (select nextval('s') as offset,idgrupo,grupo
>                         from (select idgrupo,grupo from cc_grupos
> order by grupo) x
>                         offset 0 ) xx
> where idgrupo=5;
>
Gracias Jaime, esto funciona muy bien.


>
> o mejor aun:
>
> select * from (select nextval('s') as offset, idgrupo, grupo
>                          from cc_grupos offset 0) as foo
> where idgrupo = 5
>

Esto no, ya que necesito que primero esten ordenados los registros y luego
aplicar el consecutivo, y con esto, aplica el serial y luego los ordena,
quedando el serial de manera de manera desordenada, (inserte un registro mas
, ya que con los datos anteriores, si salia el mismo resultado)
 idgrupo |     grupo
---------+---------------
       7 | AAA
       1 | ABCD
       5 | BACILADORAS
       3 | DENOMINACION
       4 | LAS PAGADORAS
(5 filas)

ordenados;

 offset | idgrupo |     grupo
--------+---------+---------------
      1 |       7 | AAA
      2 |       1 | ABCD
      3 |       5 | BACILADORAS
      4 |       3 | DENOMINACION
      5 |       4 | LAS PAGADORAS
(5 filas)

resultado queda con offset igual a 2, cuando deberia de ser 3:
postg...@contable[localhost]=# begin;create sequence s;select * from (select
nextval('s') as offset,idgrupo
,grupo from cc_grupos offset 0) as foo where idgrupo = 5;rollback;
BEGIN
CREATE SEQUENCE
 offset | idgrupo |    grupo
--------+---------+-------------
      2 |       5 | BACILADORAS
(1 fila)

ROLLBACK

Bueno, pero solo me queda la duda, ¿Se considera normal que Postgresql
empuje los select's internos hacia afuera?


> --
> Atentamente,
> Jaime Casanova
> Soporte y capacitación de PostgreSQL
> Asesoría y desarrollo de sistemas
> Guayaquil - Ecuador
> Cel. +59387171157
>



-- 
:: God bless you, every day and every night ::

Responder a