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

Responder a