Firebird função extract()

Firebird

07/02/2006

Olá pessoal,

alguém poderia tirar uma dúvida por favor.
É o seguinte, estou fazendo uma query onde devo buscar quantos produtos foram vendidos no período de dezembro/2004 até janeiro/2005. Mais preciso que mostre separadamente em cada mês, por exemplo:
dezembro - 30
janeiro - 20
fevereiro - 50 e assim para cada mês do ano.

Bom, desta forma não traz o resultado que desejo
select
count(dataativacao),
count(datacancelamento)
from contrato
where
extract(month from dataativacao) between ´01´ and ´12´
and Extract(year from dataativacao) between ´2004´ and ´2005´
group by
extract(month from dataativacao),
extract(month from datacancelamento)

Alguém save como resolvo isso?

Obrigada!
Adriane


Adriane

Adriane

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

09/02/2006

adriane, trouxe apenas três linhas por conta do where.
where (extract(year from dataativacao) + (extract(month from dataativacao) / 100)) between 2004.12 and 2005.02
ou seja:
12/2004
01/2005
02/2005
a instrução está correta.

quanto a dividir por 100 (cem), é para que mostre o mês no formato 2004.12, por exemplo. assim, se você ordenar por esse campo, a ordenação será na ordem correta.

se a sua intenção era pesquisar de 01/2004 até 12/2005, a instrução deverá mudar para (note a alteração no where):
select 
  (extract(year from dataativacao) + (extract(month from dataativacao) / 100)) mes, 
  count(dataativacao) quantidade, 
from 
  contrato 
where 
  (extract(year from dataativacao) + (extract(month from dataativacao) / 100)) 
  between 2004.01 and 2005.12
group by 
  1



GOSTEI 1

Mais Respostas

Emerson Nascimento

Emerson Nascimento

07/02/2006

veja se assim funciona:
select 
  (extract(year from dataativacao) + (extract(month from dataativacao) / 100)) mes,
  count(dataativacao) quantidade,
from
  contrato 
where
  (extract(year from dataativacao) + (extract(month from dataativacao) / 100))
  between 2004.12 and 2005.02
group by 
  (extract(year from dataativacao) + (extract(month from dataativacao) / 100))


poderia ser também
group by 
  1 (visto que o agrupamento é feito pelo 1o. campo da instrução)



GOSTEI 0
Adriane

Adriane

07/02/2006

Emerson,

desta forma não deu certo, me trouxe apenas três linhas e já verifiquei em todos os meses houve venda.

Só me tire uma dúvida pq precisamos de dividir por 100?
select
[b:5c01483317](extract(year from dataativacao) + (extract(month from dataativacao) / 100))[/b:5c01483317] mes,
count(dataativacao) quantidade
from
contrato
where
(extract(year from dataativacao) + (extract(month from dataativacao) / 100))
between 2004.12 and 2005.02
group by
1

Obrigada!


GOSTEI 0
Adriane

Adriane

07/02/2006

Oi, Emerson

muito obrigada pela ajuda. Desculpe, pela dúvida meio ´burra´ é que estou iniciando e ainda tenho muito o que aprender.

Abraços


GOSTEI 0
POSTAR