Jump to content

Limitar Sub Consulta


freesurf0
 Share

Recommended Posts

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

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

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
Link to comment
Share on other sites

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

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
Link to comment
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
 Share

×
×
  • 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.