Problema com SQL no FB

16/05/2008

2

Salve colegas... preciso de um help, to aqui quebrando a cabeça e tá difícil de resolver...

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


Responder

Posts

16/05/2008

Edineidaniel

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:
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...


Responder

16/05/2008

Maikel

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


Responder

16/05/2008

Edineidaniel

Ok...

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


Responder

16/05/2008

Maikel

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


Responder

16/05/2008

Edineidaniel

hmmm...

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


Responder

16/05/2008

Maikel

poisé.. nada de solução ainda...

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



Responder

17/05/2008

Parosan

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.


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar