Resultados agrupados por mes
Tenho um query que me conta o numero de ocorrencias por dia:
Dia Ocurrencias
01-01-2003 2
02-03-2003 4
03-03-2003 3
...
02-08-2003 1
03-08-2003 3
O query é o seguinte:
Agora o que eu pretendo é agrupar tudo por mês:
Mês Ocurrencias
1 20
2 28
3 25
...
Em access isto era facil e em Firebird/Interbase alguem sabe como é?
Dia Ocurrencias
01-01-2003 2
02-03-2003 4
03-03-2003 3
...
02-08-2003 1
03-08-2003 3
O query é o seguinte:
SELECT PEDIDOS.PD_DATA, count(pedidos.pd_data) as cnt FROM PEDIDOS where pedidos.pd_data>´01-01-2003´ group by pedidos.pd_data order by pedidos.pd_data;
Agora o que eu pretendo é agrupar tudo por mês:
Mês Ocurrencias
1 20
2 28
3 25
...
Em access isto era facil e em Firebird/Interbase alguem sabe como é?
Espiridiao
Curtidas 0
Respostas
Fabricio
09/09/2003
Existe uma função para extrair o mês (acho que é extractmonth) é só mandar agrupar por mês.
GOSTEI 0
Espiridiao
09/09/2003
Essa função não existe o que existe é a EXTRACT, mas não encontro documentação com exemplos, os docs que vêm no Firebird referenciam EXTRACT duas vezes mas não dão exemplo.
Obrigado.
Obrigado.
GOSTEI 0
Afarias
09/09/2003
O EXTRACT é usado da forma::
EXTRACT( _info_ FROM _campo_ ) onde _info_ pode ser ::
DAY
WEEKDAY
MONTH
YEAR
ex::
SELECT EXTRACT( MONTH FROM PD_DATA ) AS MES FROM PEDIDOS;
Agora, seu problema será :: No IB 6.0 ou FB 1.0 *não* é possível agrupar (GROUP BY) por função ... de forma q, se vc usa uma destas duas versões, não será possível agrupar pelo EXTRACT.
Entretanto, isto é de fácil solução ::
1 - crie um campo MES ::
alter table pedidos add mes smallint;
2 - preencha o campo MES ::
update pedidos set mes = extract(month from pd_data);
3 - use este campo mes na sua query...
4 - crie uma trigger before insert e outra before update na tabela pedidos com o codigo ::
new.mes = extract(month from new.pd_data);
T+
EXTRACT( _info_ FROM _campo_ ) onde _info_ pode ser ::
DAY
WEEKDAY
MONTH
YEAR
ex::
SELECT EXTRACT( MONTH FROM PD_DATA ) AS MES FROM PEDIDOS;
Agora, seu problema será :: No IB 6.0 ou FB 1.0 *não* é possível agrupar (GROUP BY) por função ... de forma q, se vc usa uma destas duas versões, não será possível agrupar pelo EXTRACT.
Entretanto, isto é de fácil solução ::
1 - crie um campo MES ::
alter table pedidos add mes smallint;
2 - preencha o campo MES ::
update pedidos set mes = extract(month from pd_data);
3 - use este campo mes na sua query...
4 - crie uma trigger before insert e outra before update na tabela pedidos com o codigo ::
new.mes = extract(month from new.pd_data);
T+
GOSTEI 0
Espiridiao
09/09/2003
Em primeiro lugar obrigado pelo vosso apoio. :D
Eu resolvi o problema pegando num exemplo que afarias deu para uma situação parecida com esta:
criar um view.
executar um query tendo como fonte o view anteriormente criado.
Isto funciona ás mil maravilhas, e aprendia a utilizar os views para
substituir tabelas temporarias.
Obrigado
Eu resolvi o problema pegando num exemplo que afarias deu para uma situação parecida com esta:
criar um view.
executar um query tendo como fonte o view anteriormente criado.
Isto funciona ás mil maravilhas, e aprendia a utilizar os views para
substituir tabelas temporarias.
Obrigado
GOSTEI 0
Afarias
09/09/2003
A solução da VIEW é realmente ótima e muito mais PROFISSIONAL.
T+
T+
GOSTEI 0