[firebase-br] SQL Complexa ainda mais
Luiz Carlos
luizcmjr em gmail.com
Qua Jun 30 10:39:23 -03 2010
Helio... aproveitando a ideia... fiz uns testes aqui...
select x.*
from teste x
where ( x.matricula is not null )
/*1 Condição mes e ano dentro periodo selecionado*/
and
(
( :mes between extract(month from X.data_ini) and extract(month from
X.data_fim ) )
and
( :ano between extract(year from X.data_ini) and extract(year from
X.data_fim ) )
and
( x.data_fim is not null )
)
/*2 Condição mes e ano igual ou maior que o periodo selecionado e data final
nula */
or
(
( :mes >= extract(month from X.data_ini) and x.data_fim is null )
and
( :ano >= extract(year from X.data_ini) and x.data_fim is null )
)
Tenta ai... e poste o resultado!!!
Em 30 de junho de 2010 09:21, Hélio Oliveira <hpensador em gmail.com> escreveu:
> Bom dia Colegas!
>
> No dia 11/05/2010 eu postei aqui no news uma SQL que estava tentando montar
> para obter um valor em uma tabela conforme abaixo. Desculpem colegas este
> teste ficará um pouco grande
>
> Tenho uma tabela "TESTE" com os seguintes campos:
> matricula integer,
> data_inicio date,
> data_final date,
> valor numeric(14,2)
>
> A mesma esta populada com os seguinte valores
> matricula data_inicio data_final valor
> 10 02/01/2009 30/06/2009 500,00
> 10 01/07/2009 30/11/2009 650,00
> 10 01/12/2009 <null> 800,00
>
> O que preciso:
> Se o mês informado estiver compreendido entre 1/2009 e 6/2009 o valor
> retornado seja 500,00;
> Se o mês informado estiver compreendido entre 7/2009 e 11/2009 o valor
> retornado seja 650,00;
> Se o mês informado for 12/2009 ou maior o valor retornado seja 800,00;
>
> Com a ajuda do colega J. Vinicius chegamos a seguinte SQL que nesta base
> funcionou.
>
> select x.*
> from teste x
> where x.matricula = :matricula
> and (( :mes between extract(month from X.data_inicio) and extract(month
> from X.data_final))
> and ( extract(year from X.data_inicio)=:ano ) and X.data_final is not null
> )
> or (( :mes >= extract(month from X.data_inicio) )
> and ( extract(year from X.data_inicio)=:ano ) and X.data_final is null )
> or (( extract(year from X.data_inicio)<:ano ) and X.data_final is null)
>
> Mais agora em uma base real a referida não funciona... abaixa a tabela
> atual com os dados.
>
> Cod_cargo Matricula Data_inicio Data_final Salario
> 5 1 01/01/2009 31/05/2010 465,00
> 5 1 01/06/2010 <null> 510,00
>
> Vejam, aplicando a SQL acima nesta tabela para os meses de 1 até 5/2009 é
> retornado o valor correto 465,00, porém se passamos o mês 6/2009 é retornado
> null - sendo que deveria retornar 510,00.
>
>
> --
> []'s,
>
> Hélio Oliveira
> Analista de Sistemas
> Delphi Developer
> http://hpensador.blogspot.com/
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista