3

Tengo la siguiente consulta MySQL:

select * from venta as v, pago_venta as pv
where pv.pv_fecha in (SELECT MAX(pv_fecha) FROM pago_venta as p GROUP BY ven_id ) AND v.ven_id = pv.ven_id AND v.ven_cliente= 'Amaia Valentina Cardenas Gonzales'

Esta consulta muestra el siguiente resultado:

Resultado de la consulta

Ahora el problema que no puedo resolver es que me muestre el ultimo registro de cada ven_id, cuando tienen pv_fecha fechas distintas esta consulta funciona bien sin problemas, pero si pv_fecha tienen la misma fecha me muestra la cantidad de registros que se almacenan en la misma fecha si son 10 muestra los 10 de la misma fecha. Aqui se puede ver mi consulta: Consulta BD

M.Antonio
  • 77
  • 1
  • 7

2 Answers2

2

Una forma de recuperar el último registro de pago_venta por ven_id si podemos considerar (entiendo que sí) que pv_id tiene una correlación con la fecha, es decir el máximo pv_id es el último cronológicamente, es hacer lo siguiente:

SELECT pv.*
    FROM venta as v
    INNER JOIN (SELECT  VEN_ID, 
                        MAX(pv_id) as pv_id
                    FROM pago_venta
                    GROUP BY ven_id
               ) as m
        ON v.ven_id = m.ven_id 
    INNER JOIN pago_venta as pv
        ON v.ven_id = pv.ven_id 
        AND pv.pv_id = m.pv_id
    WHERE v.ven_cliente= 'Amaia Valentina Cardenas Gonzales' 

Nota: Modifiqué tus JOINS a la forma explicita por que me resulta más fácil de entender y además es la forma recomendable (Ver).

Patricio Moracho
  • 54,367
  • 12
  • 35
  • 68
1

Basado en la estructura de tus tablas, diria que una consulta asi resolveria tus problemas:

select *
from venta as v, pago_venta as pv
where 
     v.ven_id = pv.ven_id 
     AND 
     v.ven_cliente= 'Amaia Valentina Cardenas Gonzales'
     AND pv.pv_id in 
         (SELECT MAX(pv_id) FROM pago_venta as p 
          WHERE
              pv.pv_fecha in (SELECT MAX(pv_fecha) FROM pago_venta as p GROUP BY ven_id )
          GROUP BY ven_id  )

En este caso meti un agrupamiento dentro de otro como clausula de exclusion. No creo que sea lo mas optimo (depende mucho de la cantidad de datos) pero devuelve lo que corresponde.

gbianchi
  • 19,675
  • 11
  • 38
  • 58