freesurf0 Posted March 24, 2014 Report Share Posted March 24, 2014 Bom dia, estou precisando fazer o seguinte: Tenho uma tabela de clientes e outra de pagamentos, gostaria de selecionar todos os clientes e juntamente com eles suas 3 últimas faturas. Minhas tabelas: asp_clientes_servicos t12_cod_cliente | INT(11) PK t12_nome | VARCHAR(255) asp_clientes_pag t11_codigo | INT(11) t11_cod_cliente | INT(11) FK t11_valor Obrigado Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 24, 2014 Report Share Posted March 24, 2014 falta a informação de "últimas" facturas na tabela de pagamentos, isto é, informação de data IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
freesurf0 Posted March 24, 2014 Author Report Share Posted March 24, 2014 Ah, sim, é que na verdade tem, porém, esqueci de colocar aqui asp_clientes_servicos t12_cod_cliente | INT(11) PK t12_nome | VARCHAR(255) asp_clientes_pag t11_codigo | INT(11) t11_cod_cliente | INT(11) FK t11_valor | DOUBLE t11_emissao | DATE t11_pagamento | DATE Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 24, 2014 Report Share Posted March 24, 2014 assim de cabeça podes fazer: select t12_cod_cliente as cod_cliente, t12_nome as nome, P1.t11_emissao as p1_data, P1.t11_valor as p1_valor, P2.t11_emissao as p2_data, P2.t11_valor as p2_valor, P3.t11_emissao as p3_data, P3.t11_valor as p3_valor from asp_clientes_servicos inner join (select t11_cod_cliente, t11_emissao, t11_valor from asp_clientes_pag order by t11_emissao desc limit 3, 1) as P1 on asp_clientes_servicos.t12_cod_cliente = P1.t11_cod_cliente inner join (select t11_cod_cliente, t11_emissao, t11_valor from asp_clientes_pag order by t11_emissao desc limit 2, 1) as P2 on asp_clientes_servicos.t12_cod_cliente = P2.t11_cod_cliente inner join (select t11_cod_cliente, t11_emissao, t11_valor from asp_clientes_pag order by t11_emissao desc limit 1, 1) as P3 on asp_clientes_servicos.t12_cod_cliente = P3.t11_cod_cliente IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
freesurf0 Posted March 24, 2014 Author Report Share Posted March 24, 2014 Obrigado. Resolvido a situação! Abraços Miguel Machado Link to comment Share on other sites More sharing options...
freesurf0 Posted March 24, 2014 Author Report Share Posted March 24, 2014 Solução na qual estava fazendo e acabei conseguindo fazer, pois ao invés de utilizar LIMIT, usei BETWEEN comparando com a data atual -- Terceiro, lista os serviços juntamente com os pagamentos, porém, exibe apenas os 3 últimos pagamentos para cada cliente (t12_cod_cliente) SELECT * FROM ( -- Segundo, faz a junção dos serviços selecionados com os pagamentos SELECT * FROM ( -- Primeiro seleciona todos os serviços SELECT * FROM asp_clientes_servicos ) AS servicos INNER JOIN asp_clientes_pag pagamentos ON servicos.t12_cod_cliente = pagamentos.t11_cod_cliente ) AS clientes_servicos_pagamentos INNER JOIN asp_clientes clientes ON clientes.t1_cod = clientes_servicos_pagamentos.t12_codigo WHERE clientes_servicos_pagamentos.t11_vencimento BETWEEN CURDATE() - INTERVAL 90 DAY AND CURDATE() Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 24, 2014 Report Share Posted March 24, 2014 alem de existir elementos no SQL que estão claramente a mais, isso resulta numa lista de registos do género: clientX | pagamento1 clientX | pagamento2 clientY | pagamento1 clientY | pagamento2 clientY | pagamento3 clientY | pagamento4 clientZ | pagamento1 o que leva a um código de interpretação dos registos muito confuso e propenso a erros. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus 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