Fórum Firebird função extract() #55122

07/02/2006

0

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

Responder

Post mais votado

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):
1
2
3
4
5
6
7
8
9
10
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



Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 1

Mais Posts

07/02/2006

Emerson Nascimento

veja se assim funciona:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)



Responder

Gostei + 0

08/02/2006

Adriane

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!


Responder

Gostei + 0

09/02/2006

Adriane

Oi, Emerson

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

Abraços


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar