MySQL - Listar el ultimo estado de cada usuario

 
Vista:
sin imagen de perfil

Listar el ultimo estado de cada usuario

Publicado por Marcos (6 intervenciones) el 13/10/2016 14:02:12
Buenas, tengo una duda y no consigo resolverla, a ver si alguien sabe la solución.

Tengo una base de datos con una tabla de "estados" con una serie de atributos.(id_estado, id_usuario, tipo etc...)

Hago un "SELECT * FROM estados" para que me devuelva todo.

Pero lo que necesito es que me devuelva solo 1 estado de cada usuario, en concreto el ultimo de cada usuario.

He utilizado "SELECT * FROM estados GROUP BY id_usuario", me devuelve 1 estado de cada usuario, pero el que devuelve es uno al azar y necesito que me devuelva el ultimo de cada usuario.

Muchas gracias.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 98
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Listar el ultimo estado de cada usuario

Publicado por Yamil (40 intervenciones) el 13/10/2016 14:28:46
Si el ultimo id del estado es el mayor para un cliente en particular, puedes hacer algo como
SELECT *
FROM estados
GROUP BY id_usuario
ORDER BY id_estado DESC
LIMIT 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Listar el ultimo estado de cada usuario

Publicado por Marcos (6 intervenciones) el 14/10/2016 02:36:25
Gracias por tu respuesta Yamil.

He probado con el LIMIT pero solo me devuelve en total un registro.
Deberia ser uno por cada usuario.

Por mas que le doy vueltas no lo consigo... :(:(:(:(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 98
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Listar el ultimo estado de cada usuario

Publicado por Yamil Brach (40 intervenciones) el 14/10/2016 03:03:56
Si... cierto... creo que me apresure en responder... :-)
Y si haces simplemente

SELECT d_usuario, max(id_estado)
FROM estados
GROUP BY id_usuario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Listar el ultimo estado de cada usuario

Publicado por Rafael (97 intervenciones) el 14/10/2016 07:44:02
Pregunta:

Tienes una fecha de Estado??? Si es asi deberías pensar en obtener la MAXIMA (ultima) fecha de cambio de estado de cada usuario, y con ella mostrar el estado.

Si no es así como sabes cual es el último?
Y en base a eso busca primero el MAXIMO "X" (ultimo "x") y luego buscas el estado

con algo parecido a esto:

1
2
3
4
5
6
7
8
SELECT id_usuario, id_estado
FROM   estados
       JOIN (SELECT id_usuario
	              , MAX(fecha) as fecha_a_buscar
		     FROM   estados
			 GROUP  BY id_usuario) SQ
	     ON      estados.id_usuario = SQ.id_usuario
		     AND estados.fecha = SQ.fecha_a_buscar

En el caso del "X" pues sustituyes el fecha por el "X"

Espero te sirve la info, en cuyo caso a mi me sirve tu +1

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Listar el ultimo estado de cada usuario

Publicado por Marcos (6 intervenciones) el 14/10/2016 11:58:53
Lo he probado y me devuelve la misma respuesta.

Gracias , a ver si lo conseguimos! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Listar el ultimo estado de cada usuario

Publicado por Marcos (6 intervenciones) el 14/10/2016 12:35:08
He probado con :

SELECT max(id) FROM `estados` GROUP BY id_usuario

y me devuelve los id necesarios!! BIEN!!

Pero ahora tengo q listar todo los datos de esos id que me devuelve la consulta. Una sentencia anidada.
Alguno sabe como seria?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Listar el ultimo estado de cada usuario

Publicado por Rafael (97 intervenciones) el 14/10/2016 12:44:38
Marco pues te lo puse... no se que probaste ni si lees lo que uno te pone...

1
2
3
4
5
6
7
8
SELECT id_usuario, id_estado
FROM   estados
       JOIN (SELECT id_usuario
	              , MAX(id) as id_a_buscar
		     FROM   estados
			 GROUP  BY id_usuario) SQ
	     ON      estados.id_usuario = SQ.id_usuario
		     AND estados.id = SQ.id_a_buscar

Por eso te dije que si no te servia la fecha lo sustituyeras por lo que te servia en este caso id

Espero te sirve la info, en cuyo caso a mi me sirve tu +1

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Listar el ultimo estado de cada usuario

Publicado por Marcos (6 intervenciones) el 14/10/2016 12:53:56
Muchas gracias por tu respuesta Rafael.

Claro q leí tu respuesta y la probé , lo siento si no pareció así.

Este es el error que me devuelve dicha consulta :

#1052 - Column 'id_usuario' in field list is ambiguous

Gracias por tu paciencia y tu tiempo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Listar el ultimo estado de cada usuario

Publicado por Marcos (6 intervenciones) el 14/10/2016 13:22:56
Por fin!!!
Gracias Rafael.
Modifique un poco tu consulta y ya lo consegui!!
Asi quedo:

1
2
3
4
5
6
7
SELECT *
FROM `estados`
JOIN (SELECT max(id) as id
FROM `estados`
GROUP BY id_usuario
ORDER BY max(id) DESC) SQ
ON estados.id = SQ.id;

Lo unico malo, que tengo q listar tambien los datos de la tabla usuario relacionados, y usando el JOIN no se como seria.
Muchisimas Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar