fil79 Posted October 30, 2009 at 04:57 PM Report Share #294058 Posted October 30, 2009 at 04:57 PM 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 Link to comment Share on other sites More sharing options...
Gooden Posted October 30, 2009 at 05:14 PM Report Share #294059 Posted October 30, 2009 at 05:14 PM 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 Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 05:17 PM Author Report Share #294060 Posted October 30, 2009 at 05:17 PM deu este erro: #1582 - Incorrect parameter count in the call to native function 'DATEDIFF' MCITP-MCTS-MCP Link to comment Share on other sites More sharing options...
Gooden Posted October 30, 2009 at 05:20 PM Report Share #294061 Posted October 30, 2009 at 05:20 PM Podes extrair um create dessas 3 tabelas para simular aqui? Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 05:21 PM Author Report Share #294062 Posted October 30, 2009 at 05:21 PM o que significa o "d" em DATEDIFF('d'?? MCITP-MCTS-MCP Link to comment Share on other sites More sharing options...
Gooden Posted October 30, 2009 at 05:29 PM Report Share #294064 Posted October 30, 2009 at 05:29 PM é 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') Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 05:36 PM Author Report Share #294067 Posted October 30, 2009 at 05:36 PM 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 Link to comment Share on other sites More sharing options...
Gooden Posted October 30, 2009 at 05:38 PM Report Share #294068 Posted October 30, 2009 at 05:38 PM 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() Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 05:41 PM Author Report Share #294069 Posted October 30, 2009 at 05:41 PM 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 Link to comment Share on other sites More sharing options...
Gooden Posted October 30, 2009 at 05:46 PM Report Share #294070 Posted October 30, 2009 at 05:46 PM que tipo de base de dados tas a usar? Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 05:48 PM Author Report Share #294071 Posted October 30, 2009 at 05:48 PM Mysql MCITP-MCTS-MCP Link to comment Share on other sites More sharing options...
Gooden Posted October 30, 2009 at 05:52 PM Report Share #294073 Posted October 30, 2009 at 05:52 PM 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 Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 06:06 PM Author Report Share #294074 Posted October 30, 2009 at 06:06 PM 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 Link to comment Share on other sites More sharing options...
Gooden Posted October 30, 2009 at 06:10 PM Report Share #294075 Posted October 30, 2009 at 06:10 PM 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 =) Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 06:12 PM Author Report Share #294076 Posted October 30, 2009 at 06:12 PM ok vou testar...no server...muito obrigado MCITP-MCTS-MCP Link to comment Share on other sites More sharing options...
fil79 Posted October 30, 2009 at 07:05 PM Author Report Share #294087 Posted October 30, 2009 at 07:05 PM ok...está resolvido...muito obrigado!!! MCITP-MCTS-MCP Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now