Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia Pessoal,
Criei uma consulta ao BD onde seleciono os valores máximo e mínimo de um determinado período, a partir de uma consulta mais ampla, conforme query abaixo.
select max(vendas), min(vendas) from(
select distinct (dat_emissao) as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
-- and dat_emissao between '2004-06-07' and '2013-12-31' and
group by dat_emissao
-- order by dat_emissao
order by vendas desc) as registro
Porém, o resultado apresentado não satisfaz a minha necessidade, gerando uma coluna com o máximo e outra com o mínimo.
max min
---------------------
338 2
Mas o que eu realmente quero, é uma forma de "pegar" as datas em que ocorrem os valores máximo e mínimo, e os valores (máximo e mínimo) em uma mesma coluna, ordenados por data, conforme modelo montado abaixo, pois ainda não consegui o mesmo resultado via SQL.
data max_min
----------------------------------
2004-06-07 2
2006-06-05 338
Obrigado a todos que puderam me ajudar.
tente :
--informa a qtd por data
select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao
--maximas
select *
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao)
where vendas = (select max(vendas)
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao))
--minimas
select *
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao)
where vendas = (select min(vendas)
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao))
--tudo
select *
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao)
where vendas = (select max(vendas)
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao))
union all
select *
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao)
where vendas = (select min(vendas)
from (select dat_emissao as data, count(dat_emissao) as vendas
from cadcvend
where flg_excluido is null
and num_nf is null
group by dat_emissao))Obrigado Motta pelas Dicas. Já testei sua solução e funcionou perfeitamente bem. Tive apenas que incluir os "alias" das subqueries e um order by no final para ordenar a consulta por data.
Talvez tenha uma maneira melhor de fazer usando funções analíticas mas estas dependem do BD em questão.
http://www.postgresql.org/docs/8.4/static/tutorial-window.html
e tirando o count da data?