[firebase-br] SQL (complexa)

Alexandre Sousa dave.malkavian em gmail.com
Qua Maio 12 10:37:32 -03 2010


Isso ajuda? :)

select extract(month from [campo de periodo]) || '/' || extract(year from 
[campo de periodo]),
  sum([campo a totalizar])
from TABELA
where
  ([campo de periodo] between :DATAINI and :DATAFIM)
group by extract(month from [campo de periodo]), extract(year from [campo de 
periodo])

[]'s
Alexandre Sousa
----- Original Message ----- 
From: "cury firebird" <cury.fb em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, May 12, 2010 10:19 AM
Subject: Re: [firebase-br] SQL (complexa)


então... aí sim... é isso exatamente o que eu penso!!

agora na sql que o hélio passou, ele trabalha somente com a data inicial...
eu não entendi muito bem qual é o objetivo !


ele disse assim:
"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;"

mas talvez se o raciocínio fosse assim, eu teria uma solução:
"O que preciso:
trazer o registro em que o mês da data informada estiver entre o mês da data
inicial e o mês da data final
então o valor retornado será o que satisfazer a condição!"



o que eu quis dizer anteriormente é que eu não posso trabalhar uma SQL em
função de valores pré estabelecidos, simplesmente porque estamos trabalhando
com um banco de dados onde os campos podem assumir inúmeros valores.....
agora se o que se precisa são valores pré-estabelecidos, é melhor fazer via
programação!

me desculpem se eu não estou compreendendo bem o problema!




--------------------------------------------------
From: "Alysson Azevedo" <agalysson em gmail.com>
Sent: Tuesday, May 11, 2010 5:50 PM
To: "FireBase" <lista em firebase.com.br>
Subject: Re: [firebase-br] SQL (complexa)

> não necessariamente, amigo...
> normalmente, temos uma data inicial e uma final e queremos ver todos os
> registros que estejam ali no meio...
> ai sim, é o que vc falou...
>
> no problema do cara...
> ele tem um registro, com dois periodos: dt_inicio e dt_final
> para achar esse registro com uma dt_sel qualquer... tem que ser: dt_inicio
> <= dt_sel <= dt_final...
> ou seja, dt_sel deve estar entre as duas datas do registro...
>
> pro firebird, tanto fazer se é um campo entre dois valores ou um valor 
> entre
> dois campos...
> --
>
> Alysson Gonçalves de Azevedo
> (11) 8491-7730
>
> (\(''^_^ )/)
>
> "Pobre vive dizendo que não tem nada, mas quando vem a enchente, ele sai
> gritando: -Perdi tudo!!!"
>
>
>
>
> Em 11 de maio de 2010 17:09, cury firebird <cury.fb em gmail.com> escreveu:
>
>> Talvez eu não tenha entendido muito bem o que voce quer.....estou achando
>> complicado, pois a consulta deve ser em função da estrutura e não em 
>> função
>> dos dados!
>> então nesse caso ficaria mais fácil trabalhar diretamente no sistema e 
>> não
>> através do banco!
>>
>> Se você puder explicar melhor o que está querendo... eu não compreendi
>> muito bem !
>>
>>
>> --------------------------------------------------
>> From: "Hélio Oliveira" <hpensador em gmail.com>
>> Sent: Tuesday, May 11, 2010 1:09 PM
>> To: <lista em firebase.com.br>
>> Subject: [firebase-br] SQL (complexa)
>>
>>
>>  Boa tarde Colegas!
>>>
>>> Não estou conseguindo chegar a um resultado satisfatório para obter um
>>> determinado valor em uma consulta.
>>>
>>> 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;
>>>
>>> Estou tentando com a seguinte SQL mais o resultado não é satisfatório,
>>> pois em alguns meses são retornados todos os registros.
>>>
>>> select x.*
>>> from teste x
>>> where x.matricula = 10
>>>  and (((extract(month from x.data_inicio) = :mes
>>>  and    extract(year  from x.data_inicio) = :ano)
>>>   or   (extract(month from x.data_inicio) <= :mes
>>>  and    extract(year  from x.data_inicio) >= :ano)))
>>>
>>> --
>>> []'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
>>
> ______________________________________________
> 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 





Mais detalhes sobre a lista de discussão lista