• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fil79

problema SQL[RESOLVIDO]

16 mensagens neste tópico

Boas

Tenho aqui o seguinte sql com um join de duas tabelas (apolice e recibos), uma apólice pode ter vários recibos...o que queria era calcular as apólices que em que o último recibo tenha a data de fim com mais de 340 dias e não estou a conseguir fazer só com uma query:


SELECT recibo.data_fim as fim,apolice.numero,apolice.apolice_id

   FROM apolice

   left join recibo 

   on(recibo.apolice=apolice.apolice_id)

   WHERE   DATEDIFF(CURDATE(),recibo.data_fim)>340

   Group by apolice.apolice_id

   ORDER BY recibo.data_fim desc

O group by apoilice_id faz com que vá buscar o recibo mais antigo, o que queria é que o join fosse feito só com o recibo mais recente...como posso fazer isso

Desde já agradeço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenta meter a opção no datediff...

SELECT recibo.data_fim as fim,apolice.numero,apolice.apolice_id

   FROM apolice

   left join recibo

   on(recibo.apolice=apolice.apolice_id)

   WHERE   DATEDIFF('d',CURDATE(),recibo.data_fim)>340

   Group by apolice.apolice_id

   ORDER BY recibo.data_fim desc

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

deu este erro:

#1582 - Incorrect parameter count in the call to native function 'DATEDIFF'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é para fazer a diferença em dias. tenta meter day sem as pelicas...

Já encontrei o erro. Mete o "d" sem pelicas

select datediff(d, '20090101','20090202')

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

deu novamente o erro:

#1582 - Incorrect parameter count in the call to native function 'DATEDIFF'

aparentemente a função não tem 3 parâmetros

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exactamente. são 3 parâmetros tal como descrevi na sql acima.

Formata a data para ANO MÊS DIA. ano com 4, caracteres mês com, 2 dia com 2

não uses CURDATE().... usa antes getdate()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para a query:

SELECT recibo.data_fim AS fim, apolice.numero, apolice.apolice_id

FROM apolice

LEFT JOIN recibo ON ( recibo.apolice = apolice.apolice_id )

WHERE DATEDIFF( d, CURDATE( ) , recibo.data_fim ) >340

GROUP BY apolice.apolice_id

ORDER BY recibo.data_fim DESC

LIMIT 0 , 30

o erro mantêm-se

Obrigado pela disponibilidade

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

AHHHH Pois .... eu estava a fazer para sqlserver.... mas acho que já descobri o teu erro. tenta trocar a posição das datas


SELECT recibo.data_fim as fim,apolice.numero,apolice.apolice_id

   FROM apolice

   left join recibo

   on(recibo.apolice=apolice.apolice_id)

   WHERE   DATEDIFF(recibo.data_fim,CURDATE())>340

   Group by apolice.apolice_id

   ORDER BY recibo.data_fim desc

já agora se não der ve esta pagina:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

SELECT something FROM tbl_name
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

assim parece ser melhor

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estou a usar este Sql e já não dá erro:

SELECT recibo.data_fim AS fim, apolice.numero, apolice.apolice_id

FROM apolice

LEFT JOIN recibo ON ( recibo.apolice = apolice.apolice_id )

WHERE DATE_SUB( CURDATE( ) , INTERVAL 340

DAY ) > recibo.data_fim

GROUP BY apolice.apolice_id

ORDER BY recibo.data_fim DESC

LIMIT 0 , 30

mas não tenho a certeza se está  afazer exactamente o que pretendo, não estou a perceber bem o que está  a fazer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto esta a gerar uma data que vai ser a curdate (data corrente) menos 340 dias conforme indicaste.

entendeste? se estiver resolvido mete [Resolvido] no tópico por favor =)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora