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

Coger el ultimo valor en gruop by

Estas en el tema de Coger el ultimo valor en gruop by en el foro de Mysql en Foros del Web. Hola, tengo una consulta que no consigo resolver. Tengo 2 tablas: TABLA A idcliente nombre ciudad TABLA B id idcliente fecha estado Los datos serian ...
  #1 (permalink)  
Antiguo 26/06/2013, 13:50
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 15 años, 11 meses
Puntos: 3
Coger el ultimo valor en gruop by

Hola, tengo una consulta que no consigo resolver.

Tengo 2 tablas:

TABLA A
idcliente
nombre
ciudad

TABLA B
id
idcliente
fecha
estado

Los datos serian por ejemplo:
TABLA_A
idcliente nombre ciudad
1 - Manolo - Madrid
2 - Paco - Barcelona
3 - Lucia - Santander
....

TABLA_B
id - idcliente - fecha - estado
1 - 1 - 10/10/12 - A
2 - 1 - 12/10/12 - B
3 - 1 - 16/10/12 - C
4 - 2 - 12/10/12 - B
5 - 2 - 15/10/12 - C
6 - 3 - 14/10/12 - B

Quiero seleccionar de la tabla A todos los campos, y unirlos a la tabla B, pero quiero el ultimo estado, que seria el de id mas alto.

El resultado que querria seria esto:
idcliente-nombre-ciudad-id-estado
1 - Manolo - Madrid - 3 - C
2 - Paco - Barcelona - 5 - C
3 - Lucia - Santander - 6 - B

Si hago esto:
SELECT
idcliente,nombre,ciudad,id,estado
FROM TABLA_A
LEFT JOIN TABLA_B ON TABLA_A.idcliente = TABLA_B.idcliente
GROUP BY idcliente

Me sale este resultado:
idcliente-nombre-ciudad-id-estado
1 - Manolo - Madrid - 3 - A
2 - Paco - Barcelona - 5 - B
3 - Lucia - Santander - 6 - B

Pero yo quiero el ultimo estado. He probado a añadir:
ORDER BY idcliente asc, id desc

pero no hace nada...

Alguna idea???

Gracias!
  #2 (permalink)  
Antiguo 26/06/2013, 14:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Coger el ultimo valor en gruop by

Hola Pentaxeros:

Esta tipo de consultas es una de las que más preguntan los usuarios en el foro y en general una de las más usuales en la red... cada vez que contesto me soprende el hecho de que habiendo contestado tantas veces no hayan encontrado ninguna ayuda que les haya permitido sacar la consulta por tu cuenta...

Hay muchas formas de hacerlo, pero la más común es utilizando una subconsulta... suponiendo que tu campo fecha, sea efectivamente de tipo DATE, podrías obtener la última fecha para cada usuario asi:

Código MySQL:
Ver original
  1. mysql> SELECT idcliente, MAX(fecha) max_fecha FROM tablaB GROUP BY idcliente;
  2. +-----------+------------+
  3. | idcliente | max_fecha  |
  4. +-----------+------------+
  5. |         1 | 2012-10-16 |
  6. |         2 | 2012-10-15 |
  7. |         3 | 2012-10-14 |
  8. +-----------+------------+
  9. 3 rows in set (0.00 sec)

Ahora, utilizas esto como un filtro para tus registros... es decir, si tu haces algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT TA.*, TB.id, TB.estado
  2.     -> FROM tablaA TA
  3.     -> INNER JOIN tablaB TB ON TA.idcliente = TB.idcliente;
  4. +-----------+--------+-----------+------+--------+
  5. | idcliente | nombre | ciudad    | id   | estado |
  6. +-----------+--------+-----------+------+--------+
  7. |         1 | Manolo | Madrid    |    1 | A      |
  8. |         1 | Manolo | Madrid    |    2 | B      |
  9. |         1 | Manolo | Madrid    |    3 | C      |
  10. |         2 | Paco   | Barcelona |    4 | B      |
  11. |         2 | Paco   | Barcelona |    5 | C      |
  12. |         3 | Lucia  | Santander |    6 | B      |
  13. +-----------+--------+-----------+------+--------+
  14. 6 rows in set (0.00 sec)

Obtienes todos los registros... lo único que tienes que hacer es AGREGAR UN INNER JOIN adicional con la subconsulta de ayer y preguntar por los registros que cumpla con que la fecha de tu tablaB sea igual a la MAX_FECHA de la subconsulta.

Como dije, ejemplos hay muchísimos en la red y en este mismo foro:

http://www.forosdelweb.com/f86/sacar...nadas-1043881/

http://www.forosdelweb.com/f86/sql-p...istros-982062/


http://www.forosdelweb.com/f86/duda-...erchas-925080/

Dale un vistazo y te sugiero que en el futuro utilices la herramienta de búsqueda del foro para ver si ya se posteo algo semejante a lo que necesitas.

Saludos
Leo.

Etiquetas: campo, coger, join, select, tabla, ultimo, valor
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 23:11.