2012/8/29 Osvaldo Kussama <[email protected]>

> Em 29/08/12, Edson Lidorio<[email protected]> escreveu:
> > Só ordena, no ano atual
> > veja como aparece:
> >
> > 3/2012
> > 4/2010
> > 4/2012
> > 5/2012
> > 6/2011
> > 6/2012
> > 7/2012
> > 8/2012
> >
>
>
> Mas você está usando ORDER BY date_trunc('month', a.dt_mov);?
> O comportamento acima não é o usual na ordenação de um campo date.
> Me parece que você está ordenando por to_char(a.dt_mov, 'MM/YYYY').
>
>
Osvaldo, na verdade é sim, veja que se usar `ORDER BY date_trunc('month',
a.dt_mov);` apenas o mês será considerado na ordenação, logo todo mês de
Junho (inteiro 6), por exemplo, vai ficar junto independente do ano que
seja (2011, 2012, etc.), porque o ano não foi considerado. Logo a ordenação
tem que considerar o mês e o ano, sendo que o ano deve vir antes (ou o
mesmo problema acontecerá), e temos, é claro, várias formas de fazer isso,
como:

 * ORDER BY to_char(a.dt_mov, 'YYYYMM')
 * ORDER BY extract(year from a.dt_mov), extract(month from a.dt_mov) (e a
variante com date_trunc, mesma coisa)

Ambas já apresentadas aqui, e só deve-se tomar cuidado que o que aparece no
ORDER BY tem, *obrigatóriamente*, que aparecer no GROUP BY, ou o PostgreSQL
vai apresentar um erro.

Atenciosamente,
--
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a