[firebase-br] Ajuda com SQL

André Conrado acf em andreconrado.net
Qui Maio 24 12:07:14 -03 2012


Hélio creio q seja inviável criar um filtro para informações de
registros diferentes, tentei montar algo com agrupamento mas não ficou
legal. Acho que o melhor caminho seria um BLOCK ou SP.

Em todo caso vou tentar te ajudar em outra coisa. O uso dos parâmetros
:mes e :ano vão te causar problemas quanto da mudança de ano. Então
sugiro o uso de:

DATEADD(1 MONTH TO CAST('01.' || :mes || '.' || :ano AS DATE)) - 1

Como não conheço uma função que me retorne o último dia do mês, então
utilizo o código acima e comparo com as datas que desejo retornar.
Isso claro para os casos de menor ou maior.

abçs

Em 24 de maio de 2012 09:46, Hélio Oliveira <hpensador em gmail.com> escreveu:
> Bom dia Fabiano!
>
> Obrigado pela ajuda, porém o sinal de meno se faz necessário já que
> necessito verificar durante todo periodo que o mesmo esteve afastado. Veja
> que no exemplo o funcionário esta afastado de janeiro a maio de 2009.
>
>
>> Se vc esta especificando o mês tem que tirar o sinal de <
>> ficaria assim
>>
>>> select x.data,
>>> x.afa_ret
>>> from historico x
>>> where x.matricula = :matricula
>>> and extract(month from x.data) = :mes
>>> and extract(year from x.data) = :ano
>>
>>
>>
>> --------------------------------------------------
>> From: "Hélio Oliveira" <hpensador em gmail.com>
>> Sent: Thursday, May 24, 2012 8:48 AM
>> To: <lista em firebase.com.br>
>> Subject: [firebase-br] Ajuda com SQL
>>
>>> Salve galera!
>>>
>>> Tenho a tabela HISTORICO composta pelos seguintes campos:
>>> ( matricula integer
>>> codigo_mot_afast integer,
>>> data_afastamento date,
>>> afa_ret char(1))
>>>
>>> Preciso montar uma query que receba como parametro mês e ano e me
>>> retorne o registro do afastamento dentro do mês compreendido
>>> no interavlo do afastamento.
>>>
>>> Exemplificando:
>>> Mat cod_afast data afa_ret
>>> 200 50 26.01.2009 A
>>> 200 99 26.05.2009 R
>>> 200 100 01.01.2010 A
>>> 200 110 01.02.2010 R
>>> 200 100 01.01.2011 A
>>> 200 110 01.02.2011 R
>>>
>>> Montei a query abaixo que já me atende parcialmente..
>>>
>>> select x.data,
>>> x.afa_ret
>>> from historico x
>>> where x.matricula = :matricula
>>> and ((extract(month from x.data) <= :mes
>>> and extract(year from x.data) = :ano))
>>>
>>> Testando com os seguintes valores
>>> Mês/ano
>>> 1/2009 - Retorno correto
>>> 2/2009 - idem
>>> 3/2009 - idem
>>> 4/2009 - idem
>>> 5/2009 - idem
>>> 6/2009 - Aqui começa o problema.. pois, esta sendo retornado os 2
>>> primeiros registros e não deveria retornar nenhum e não estou
>>> conseguindo montar uma condição satisfatoria...
>>> --
>>> []'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
>>
>>
>>
>> ______________________________________________
>> 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
>>
>
>
> --
> []'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