[firebase-br] sql agrupado por mes

Eduardo Jedliczka jedyfb em gmail.com
Ter Jun 9 22:52:16 -03 2009


Vou aproveitar e complementar a resposta.

se você não tiver um índice por expressão, este select irá rodar "as
natural".

Caso exista algum índice para o campo DATA_VEN, seria bom trocar o where
extract(year from data_ven) = 2008 por where data_ven between
'01.01.2008' and '31.12.2008'

mais um detalhe, nos meses anteriores ao mês 10, o campo mês terá apenas
uma casa, uma outra solução seria usar:

substring(cast(data_ven as char(10) from 6 for 2)||'/'||
substring(cast(data_ven as char(10) from 1 for 4) as mes

no lugar de:

EXTRACT(month FROM DATA_VEN)||'/'||EXTRACT(YEAR FROM DATA_VEN) AS MES

Abraço

Eduardo

Em Ter, 2009-06-09 às 22:44 -0300, Eduardo Jedliczka escreveu:

> terá que criar uma coluna extra só para ordenar...
> 
> SELECT EXTRACT(YEAR FROM DATA_VEN) * 12 + EXTRACT(month FROM DATA_VEN) as ordem, 
> EXTRACT(month FROM DATA_VEN)||'/'||EXTRACT(YEAR FROM DATA_VEN) AS MES, 
> SUM(TOTA_VEN)  AS Total
> FROM VENDAS
> WHERE extract(year from DATA_VEN)= 2008 and
> TIPO_VEN='V'
> GROUP BY 1,2
> order by 1
> 
> 
> Se você usa o FireBird 2.1, pode-se evitar enviar a coluna extra para a aplicação fazendo algo como:
> 
> Select a.mes, a.total from
> (SELECT EXTRACT(YEAR FROM DATA_VEN) * 12 + EXTRACT(month FROM DATA_VEN) as ordem, 
> EXTRACT(month FROM DATA_VEN)||'/'||EXTRACT(YEAR FROM DATA_VEN) AS MES, 
> SUM(TOTA_VEN)  AS Total
> FROM VENDAS
> WHERE extract(year from DATA_VEN)= 2008 and
> TIPO_VEN='V'
> GROUP BY 1,2) a
> Order by a.mes
> 
> Abraço
> 
> Eduardo.
> 
> Em Ter, 2009-06-09 às 22:28 -0300, Marcio Da Silva Ereno escreveu:
> > Ola Douglas..
> > Eu coloquei o ORDER BY
> > 
> > SELECT EXTRACT(month FROM DATA_VEN)||'/'||EXTRACT(YEAR FROM DATA_VEN) AS
> > MES, SUM(TOTA_VEN)  AS Total
> > FROM VENDAS
> > WHERE extract(year from DATA_VEN)= 2008 and
> > TIPO_VEN='V'
> > GROUP BY 1
> > order by 1
> >  DAI SAIU DO MESMO JEITO
> > 
> > 1/2008
> > 10/2008
> > 11/2008
> > 12/2008
> > 2/2008
> > ...
> > ..
> > ..
> > mais alguma ideia
> > 
> > 
> > 
> > 2009/6/9 Douglas Tosi <douglasht em gmail.com>
> > 
> > > 2009/6/9 Marcio Da Silva Ereno <marcio em msereno.com.br>:
> > > > Ola pessoal eu gerei este sql acumulando os valores por mes, so que eu
> > > > precisava colocar os meses em ordem alfabética. alguma ideia como fazer
> > > > isso?
> > >
> > > Adicione
> > > ORDER BY 1
> > >
> > > hth,
> > > --
> > > Douglas Tosi
> > > www.sinatica.com
> > >
> > > ______________________________________________
> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > > http://www.firebase.com.br/fb/artigo.php?id=1107
> > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> > >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa



Mais detalhes sobre a lista de discussão lista