[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