On 12/09/2013 08:39, Dickson S. Guedes wrote:
Em Qui, 2013-09-12 às 08:06 -0300, Thiago escreveu:
Bom dia a todos.
Tenho uma tabela de vendas onde contém cada item do cupom. Nesta tabela
tenho as seguinte informações:
Filial
Produto
Data
Quantidade
Para ganhar agilidade nos relatórios, criei uma tabela agrupada por mês,
contendo os seguintes campos:
Filial
Ano
Mes
Produto
Quantidade
Preciso fazer uma consulta na tabela agrupada trazendo as vendas de três
meses fechados, mas para isso eu tenho as informações de data inicial e
data final.
Qual seria a melhor forma de fazer uma "between" em uma tabela com essa
estrutura, ou qual seria a melhor estrutura para montar tabelas deste tipo?
Não ficou muito claro exatamente o que você quer, mas desconfio que você
pode usar duas alternativas, sendo uma a função date_trunc [1] onde
retornaria as datas como sendo o primeiro dia do mês daquela data (por
exemplo, date_trunc('month', current_date) é igual a '2013-09-01') com
isto você poderia juntar com a outra tabela montando o ano e o mês.
Outra alternativa é extrair o ano e o mês da data completa com a função
extract[2] (por exemplo, extract(month from current_date) é igual a 9 e
extract(year from current_data) é igual a 2013) e então juntar com a
outra tabela.
[1]
http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
[2]
http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT
[]s
Vou tentar explicar melhor minha necessidade.
Na tabela agrupada que tenho, preciso fazer uma consulta da vendas do
mês 04/2013 até 06/2013.
Para fazer esta consulta eu teria que utilizar o seguinte where:
ano = 2013 and mes = 4 or
ano = 2013 and mes = 5 or
ano = 2013 and mes = 6
Acontece que meus parâmetros de entrada são duas datas, inicial e final.
Eu gostaria de fazer uma consulta desta utilizando alguma forma de between.
Eu tentei utilizar assim:
cast(cast(ano as text) || lpad(cast(mes as text),2,'0') as integer)
between 201304 and 201306
Acontece que neste caso não irá utilizar os índices.
Eu gostaria de saber se existe uma forma de fazer a consulta utilizando
alguma forma de between ou teria que estruturar a tabela de forma
diferente, talvez com um campo ano_mes.
Obrigado!
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral