Ver Mensaje Individual
  #23 (permalink)  
Antiguo 27/07/2015, 12:38
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: regresar el ultimo registro de cada cliente

Código SQL:
Ver original
  1. CREATE TABLE #clientes(
  2. codigo INT,
  3. nombre VARCHAR(20)
  4. )
  5.  
  6.  
  7. CREATE TABLE #pagos(
  8. confirmacionpago INT,
  9. codigo INT,
  10. fecha_pago datetime,
  11. mes_pago INT,
  12. correlativo VARCHAR(20),
  13. cantidad INT,
  14. comentario VARCHAR(20),
  15. utc VARCHAR(20),
  16. usuario VARCHAR(20)
  17. )
  18.  
  19. CREATE TABLE #meses(
  20. id_mes INT,
  21. mes VARCHAR(20)
  22. )
  23.  
  24. INSERT INTO #meses VALUES (1,'Enero')
  25. INSERT INTO #meses VALUES (2,'Febrero')
  26.  
  27. INSERT INTO #clientes(codigo, nombre) VALUES (10001,'cliente 1')
  28. INSERT INTO #clientes(codigo, nombre) VALUES (10002,'cliente 2')
  29.  
  30.  
  31.  
  32. INSERT INTO #pagos(confirmacionpago, codigo, fecha_pago, mes_pago, correlativo, cantidad, comentario, utc, usuario) VALUES (53000,10001,'2015-07-26',1,'R383898493','60','comentario','1437954671','test')
  33. INSERT INTO #pagos(confirmacionpago, codigo, fecha_pago, mes_pago, correlativo, cantidad, comentario, utc, usuario) VALUES (53001,10001,'2015-07-26',2,'R1234849','60','comentario','1437955043','test')
  34. INSERT INTO #pagos(confirmacionpago, codigo, fecha_pago, mes_pago, correlativo, cantidad, comentario, utc, usuario) VALUES (53003,10002,'2015-07-27',2,'R29837928','60','comentario','1437989839','test')
  35. INSERT INTO #pagos(confirmacionpago, codigo, fecha_pago, mes_pago, correlativo, cantidad, comentario, utc, usuario) VALUES (53002,10002,'2015-07-27',1,'R9876549','60','comentario','1437989029','test')
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42. SELECT t1.codigo,t1.nombre,t3.confirmacionpago,t3.fecha_pago,t4.mes,t3.correlativo,t3.cantidad,t3.comentario,t3.utc,t3.usuario FROM #clientes AS t1
  43. LEFT JOIN
  44. (SELECT MAX(mes_pago) mes, codigo FROM #pagos GROUP BY codigo) AS t2 ON (t1.codigo=t2.codigo)
  45. LEFT JOIN #pagos AS t3 ON (t2.codigo=t3.codigo AND t2.mes=t3.mes_pago)
  46. LEFT JOIN #meses AS t4 ON (t4.id_mes=t3.mes_pago)

Resultado:
codigo nombre confirmacionpago fecha_pago mes correlativo cantidad comentario utc usuario
10001 cliente 1 53001 2015-07-26 00:00:00.000 Febrero R1234849 60 comentario 1437955043 test
10002 cliente 2 53003 2015-07-27 00:00:00.000 Febrero R29837928 60 comentario 1437989839 test

Sugerencia, para hacer lo que necesitas cambie el "mes" por un indicador numerico y lo relacione con una tabla "meses" para obtener el nombre, ademas te comento que la tabla pagos no estaba normalizada a 3 forma porque todavia estabas repitiendo los valores para mes y esos se pueden obtener agregando un catalogo como lo hice yo :).

P.D: La sentencia es en sql server(el create table con #, eso es cree una tabla temporal para hacer las pruebas, pero el query te puede funcionar en mysql)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me