Você está na página 1de 2

Firebird funo extract()

algum poderia tirar uma dvida por favor.


o seguinte, estou fazendo uma query onde devo buscar quantos produtos foram vendidos no perodo de
dezembro/2004 at janeiro/2005. Mais preciso que mostre separadamente em cada ms, por exemplo:
dezembro - 30
janeiro - 20
fevereiro - 50 e assim para cada ms do ano.

Bom, desta forma no 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)

Algum save como resolvo isso?

veja se assim funciona:
Cdigo:
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 tambm
group by
1 (visto que o agrupamento feito pelo 1o. campo da instruo)






Emerson,
desta forma no deu certo, me trouxe apenas trs linhas e j verifiquei em todos os meses houve venda.

S me tire uma dvida pq precisamos de dividir por 100?
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
1


Membro Senior
Registrado em: Tera-Feira, 16 de Maro de 2004
Mensagens: 2503
Localizao: So Paulo - SP - Brasil
Enviada: Qui Fev 09, 2006 8:03 am Assunto:

adriane, trouxe apenas trs linhas por conta do where.
Citao:
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 instruo est correta.

quanto a dividir por 100 (cem), para que mostre o ms no formato 2004.12, por exemplo. assim, se
voc ordenar por esse campo, a ordenao ser na ordem correta.

se a sua inteno era pesquisar de 01/2004 at 12/2005, a instruo dever mudar para (note a alterao
no where):
Cdigo:
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

Você também pode gostar