Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

traer la ultima y penultima fecha

Estas en el tema de traer la ultima y penultima fecha en el foro de Mysql en Foros del Web. hola que tal he tratado de traer la ultima y penultima fecha de los movimientos de los clientes, la estructura de mi información, anexo mi ...
  #1 (permalink)  
Antiguo 04/07/2013, 21:57
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 5 meses
Puntos: 1
traer la ultima y penultima fecha

hola que tal he tratado de traer la ultima y penultima fecha de los movimientos de los clientes, la estructura de mi información, anexo mi query que hice pero solamente traigo es la ultima fecha pero no consigo traer la penultima fecha.

Código MySQL:
Ver original
  1. create table tabla_a  (fecha    date        null,
  2.                        cliente  integer     null,
  3.                        region   varchar(5)  null,
  4.                        base     integer     null,
  5.                        origen   varchar(50) null);
  6.  
  7.  
  8. create table tabla_b  (fecha    date        null,
  9.                        cliente  integer     null,
  10.                        region   varchar(5)  null,
  11.                        base     integer     null,
  12.                        origen   varchar(50) null);
  13.  
  14. create table tabla_c  (fecha    date        null,
  15.                        cliente  integer     null,
  16.                        region   varchar(5)  null,
  17.                        base     integer     null,
  18.                        origen   varchar(50) null);
  19.  
  20. tabla-a
  21. fecha|cliente|region|base|origen
  22. 2011/03/06|14|C|4|tbla
  23. 2011/03/07|15|B|5|tbla
  24. 2011/03/08|16|C|3|tbla
  25. 2011/03/09|3|A|1|tbla
  26. 2011/03/10|1|B|1|tbla
  27. 2011/03/11|3|A|1|tbla
  28. 2011/03/12|2|C|2|tbla
  29. 2011/03/13|6|C|3|tbla
  30. 2011/03/14|6|C|2|tbla
  31. 2011/03/15|17|C|1|tbla
  32. 2011/03/16|5|B|3|tbla
  33. 2011/03/17|1|B|2|tbla
  34.  
  35.  
  36. tabla-b
  37. fecha|cliente|region|base|origen
  38. 2012/01/01|3|A|1|tblb
  39. 2012/01/02|1|B|2|tblb
  40. 2012/01/03|11|A|1|tblb
  41. 2012/01/03|3|A|1|tblb
  42. 2012/01/04|12|A|5|tblb
  43. 2012/01/05|13|B|4|tblb
  44. 2012/01/06|4|B|2|tblb
  45. 2012/01/06|2|C|1|tblb
  46. 2012/01/07|5|B|2|tblb
  47. 2012/01/08|5|B|1|tblb
  48. 2012/01/09|6|C|2|tblb
  49. 2012/01/10|4|B|6|tblb
  50.  
  51.  
  52.  
  53. tabla-c
  54. fecha|cliente|region|base|origen
  55. 2013/05/01|3|A|1|tblc
  56. 2013/05/01|4|A|4|tblc
  57. 2013/05/02|3|A|2|tblc
  58. 2013/05/02|5|B|1|tblc
  59. 2013/05/03|6|C|4|tblc
  60. 2013/05/04|7|A|1|tblc
  61. 2013/05/05|8|A|1|tblc
  62. 2013/05/05|9|B|2|tblc
  63. 2013/05/06|10|B|2|tblc
  64. 2013/05/07|3|A|2|tblc
  65. 2013/05/08|4|A|3|tblc
  66. 2013/05/09|1|B|1|tblc
  67. 2013/05/10|2|C|3|tblc
  68.  
  69.  
  70. -- unir las tres tablas y sacar la fecha mas reciente--
  71. select max(fecha) fec,cliente,region,base from
  72.   (select * from tabla_c
  73.    select * from tabla_b
  74.    select * from tabla_a)as todo
  75. group by cliente
  76. order by cliente asc;
  77.  
  78.  
  79. resultado
  80. fec|cliente|region|base
  81. 2013-05-09|1|B|1
  82. 2013-05-10|2|C|3
  83. 2013-05-07|3|A|1
  84. 2013-05-08|4|A|4
  85. 2013-05-02|5|B|1
  86. 2013-05-03|6|C|4
  87. 2013-05-04|7|A|1
  88. 2013-05-05|8|A|1
  89. 2013-05-05|9|B|2
  90. 2013-05-06|10|B|2
  91. 2012-01-03|11|A|1
  92. 2012-01-04|12|A|5
  93. 2012-01-05|13|B|4
  94. 2011-03-06|14|C|4
  95. 2011-03-07|15|B|5
  96. 2011-03-08|16|C|3
  97. 2011-03-15|17|C|1

necesito traer el siguiente resultado:
Código MySQL:
Ver original
  1. fecha|cliente|region|base|origen
  2. 2013/05/09|1|B|1|tblc
  3. 2012/01/02|1|B|2|tblb
  4. 2013/05/10|2|C|3|tblc
  5. 2012/01/06|2|C|1|tblb
  6. 2013/05/07|3|A|2|tblc
  7. 2013/05/02|3|A|2|tblc
  8. 2013/05/08|4|A|3|tblc
  9. 2013/05/01|4|A|4|tblc
  10. 2013/05/02|5|B|1|tblc
  11. 2012/01/08|5|B|1|tblb
  12. 2013/05/03|6|C|4|tblc
  13. 2012/01/09|6|C|2|tblb
  14. 2013/05/04|7|A|1|tblc
  15. 2013/05/05|8|A|1|tblc
  16. 2013/05/05|9|B|2|tblc
  17. 2013/05/06|10|B|2|tblc
  18. 2012/01/03|11|A|1|tblb
  19. 2012/01/04|12|A|5|tblb
  20. 2012/01/05|13|B|4|tblb
  21. 2011/03/06|14|C|4|tbla
  22. 2011/03/07|15|B|5|tbla
  23. 2011/03/08|16|C|3|tbla
  24. 2011/03/15|17|C|1|tbla

Me pueden ayudar muchas gracias, saludos
  #2 (permalink)  
Antiguo 05/07/2013, 11:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: traer la ultima y penultima fecha

Hola gerardo_goh:

Tu consulta no es tan trivial como para sacarse en un SELECT simple... en realidad tienes varias alternativas, pero la que se me ocurre que mejor se adecua a tu problema es la de simular la función ROW_NUM... checa esta liga:

http://www.artfulsoftware.com/infotr...ip.php?id=1098

Observa que con esta técnica se van enumerando los registros para cada valor de la variable i, de tal manera que al final podrías colocar una condición

Código:
...
WHERE row_number <= 2
para que te presente sólo los últimos dos registros...

Sería muy sencillo colocar la consulta final, pero me gustaría que practicaras un poco este tipo de consultas, ya que en realidad son bastante útiles.

Algunos tips... En la subconsulta, en lugar de poner

Código:
...
FROM test 
  ORDER BY i,j
tu pondrías algo como esto:

Código:
...
FROM (
     SELECT * FROM tabla_c
     UNION ALL
     SELECT * FROM tabla_b
     UNION ALL
     SELECT * FROM tabla_a
  ) T ORDER BY cliente, fecha DESC
es decir, la unión de todas tus tablas, ordenando tus datos por los dos campos que te interesan: CLIENTE y FECHA

El resto es sustituir tus campos... en lugar de comparar contra el campo i, tú compararías contra el campo T.cliente, incluyendo en el SELECT interno, todos los campos que te interesan...

Haz la prueba y si continuas con problemas, postea algo de lo que intentaste hacer y con gusto te ayudo a afinar la consulta.

Saludos
Leo.

Etiquetas: fecha, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:11.