Os teus parâmetros de entrada seriam exatamente estes "201304" e "201306"?
Se sim, poderia fazer a consulta como fez antes:
ano = cast(substr("201304",1,4) as integer) and (mes between
cast(substr("201304",6,1) as integer) and cast(substr("201306",6,1) as
integer))Assim, não modificaria os campos que estão sendo filtrados, utilizando os índices. Creio que exista forma melhor de fazer, isso seria só um esboço de sugestão.. Em 12 de setembro de 2013 08:59, Thiago <[email protected]> escreveu: > 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<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<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].**org.br<[email protected]> > https://listas.postgresql.org.**br/cgi-bin/mailman/listinfo/**pgbr-geral<https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral> >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
