Problema com SQL no FB
Salve colegas... preciso de um help, to aqui quebrando a cabeça e tá difícil de resolver...
Vejam minha SQL:
A lógica é que fosse pegar o maior registro de leitura existente em um determinado mês de um ano. Detalhe... minha primeira LEITURA foi em março, então no BD DATA_LEITURA = 26/03/2008, onde teria CONTROLE 781, mês = 3 e ano = 2008, só que o resultado é Nill. Se tiro a pesquisa por mês e ano, ele encontra um valor, mas dai já pega o valor do mês de abril, que ainda não quero.
Baseado na SQL acima... como vou conseguir pegar o maior registro existente em uma data.... lembrando que pode ser a primeira ocorrência no BD.
Agradeço pelo help.
Att
Vejam minha SQL:
select first 1 skip 0 leitura.LEITURA_TOTAL from LEITURA where ((LEITURA.ID_CONTROLE = :Controle) and (LEITURA.FEITA_LEITURA = ´S´) and (extract(month from LEITURA.DATA_LEITURA) <= :mes) and (extract(YEAR from LEITURA.DATA_LEITURA) <= :ano)) ORDER by LEITURA.DATA_LEITURA desc
A lógica é que fosse pegar o maior registro de leitura existente em um determinado mês de um ano. Detalhe... minha primeira LEITURA foi em março, então no BD DATA_LEITURA = 26/03/2008, onde teria CONTROLE 781, mês = 3 e ano = 2008, só que o resultado é Nill. Se tiro a pesquisa por mês e ano, ele encontra um valor, mas dai já pega o valor do mês de abril, que ainda não quero.
Baseado na SQL acima... como vou conseguir pegar o maior registro existente em uma data.... lembrando que pode ser a primeira ocorrência no BD.
Agradeço pelo help.
Att
Maikel
Curtidas 0
Respostas
Edineidaniel
16/05/2008
Olá Maikel....
Se vc quer pegar a maior leitor de um determinado mês do Ano não entendi o pq do ´´<=´
Testa a SQL assim:
Testa ai e ve se isso funciona...
Se vc quer pegar a maior leitor de um determinado mês do Ano não entendi o pq do ´´<=´
Testa a SQL assim:
select first 1 skip 0 leitura.LEITURA_TOTAL from LEITURA where ( (LEITURA.ID_CONTROLE = :Controle) and (LEITURA.FEITA_LEITURA = ´S´) and (extract(month from LEITURA.DATA_LEITURA) = :mes) and (extract(YEAR from LEITURA.DATA_LEITURA) = :ano) ) ORDER by LEITURA.DATA_LEITURA desc
Testa ai e ve se isso funciona...
GOSTEI 0
Maikel
16/05/2008
Bom, no caso usei o ´<=´ porque passo como referência o mês de qual quero buscar o valor, mas isso não quer dizer que não possam existir registros anteriores a este período, mês 01 ou mês 02 por exemplo, mas neste caso aqui, não tem. O primeiro registro ocorreu no mês 03.... mas mesmo assim não funcionou o código que vc me passou...
O problema está no extract... mas como resolver?
Att
O problema está no extract... mas como resolver?
Att
GOSTEI 0
Edineidaniel
16/05/2008
Ok...
Faz mais um teste....
somente para ver se desta forma retorna registros:
Fico no aguardo...
t+
Edinei
Faz mais um teste....
somente para ver se desta forma retorna registros:
select (extract(YEAR from LEITURA.DATA_LEITURA) as ANO, (extract(month from LEITURA.DATA_LEITURA) as MES, max(leitura.LEITURA_TOTAL) as LEITURA from LEITURA where ( (LEITURA.ID_CONTROLE = :Controle) and (LEITURA.FEITA_LEITURA = ´S´) ) GROUP by 1,2 ORDER by LEITURA.DATA_LEITURA desc
Fico no aguardo...
t+
Edinei
GOSTEI 0
Maikel
16/05/2008
Edi... muito tanks pelo help... mas não resolveu ainda...
Muito estranho... o único registro que foi retornado é o mês 4, ano 2008 e valor da leitura para aquele mês... ai fui ver na tabela do BD... está lá bem certo um registro para dia 26/03/2008 com valor da leitura... mas esse registro não aparece no select...
O FB tem bug?
Vlw
Muito estranho... o único registro que foi retornado é o mês 4, ano 2008 e valor da leitura para aquele mês... ai fui ver na tabela do BD... está lá bem certo um registro para dia 26/03/2008 com valor da leitura... mas esse registro não aparece no select...
O FB tem bug?
Vlw
GOSTEI 0
Edineidaniel
16/05/2008
hmmm...
Q coisa....
Lembra do sistema de biblioteca que desenvolvemos juntos...
Fiz a seguinte SQL (para ver se o FB estava com bug...)
Retornou os registros certinho....
Dai não sei o que pode se....
t+
Edinei
Q coisa....
Lembra do sistema de biblioteca que desenvolvemos juntos...
Fiz a seguinte SQL (para ver se o FB estava com bug...)
SELECT (extract(YEAR from RESERVAS.DATRESERVA)) as ANO, (extract(month from RESERVAS.DATRESERVA)) as MES, MAX(RESERVAS.CODEXEMPLAR) FROM RESERVAS WHERE (extract(YEAR from RESERVAS.DATRESERVA)) = 2008 GROUP BY 1,2
Retornou os registros certinho....
Dai não sei o que pode se....
t+
Edinei
GOSTEI 0
Maikel
16/05/2008
poisé.. nada de solução ainda...
Tenho que levar em consideração o ID_CONTROLE... ai mudei a SQL para a seguinte:
Mas retorna só o mês 04....
Existe uma outra forma de fazer isso, comparando datas sem utilizar Extract Month ou Extract Year?
Att
Tenho que levar em consideração o ID_CONTROLE... ai mudei a SQL para a seguinte:
SELECT (extract(YEAR from LEITURA.DATA_LEITURA)) as ANO, (extract(month from LEITURA.DATA_LEITURA)) as MES, MAX(LEITURA.LEITURA_TOTAL) FROM LEITURA WHERE (extract(YEAR from LEITURA.DATA_LEITURA)) = 2008 and LEITURA.ID_CONTROLE = 801 GROUP BY 1,2
Mas retorna só o mês 04....
Existe uma outra forma de fazer isso, comparando datas sem utilizar Extract Month ou Extract Year?
Att
GOSTEI 0
Parosan
16/05/2008
Passe a descrição da função dos campos e os valores atuais na tabela, por que a única forma dos resultados da SQL obtidos é se o id_controle que vc está passando é o da linha especifica de abril, passe os dados para verificarmos qual o problema.
GOSTEI 0