Jump to content
Sign in to follow this  
fil79

problema SQL[RESOLVIDO]

Recommended Posts

fil79

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


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Gooden

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

Share this post


Link to post
Share on other sites
fil79

deu este erro:

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


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Gooden

é 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')

Share this post


Link to post
Share on other sites
fil79

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


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Gooden

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()

Share this post


Link to post
Share on other sites
fil79

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


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Gooden

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

Share this post


Link to post
Share on other sites
fil79

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


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Gooden

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 =)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.