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

Obtener último elemento de un GROUP BY

Estas en el tema de Obtener último elemento de un GROUP BY en el foro de Mysql en Foros del Web. Hola, necesito ayuda con una consulta: Supongamos que tengo lo siguiente: id | nombre | grupo ----------------------------------- 1 | pepe | rojo 2 | paco ...
  #1 (permalink)  
Antiguo 14/09/2011, 15:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 6 meses
Puntos: 1
Obtener último elemento de un GROUP BY

Hola, necesito ayuda con una consulta:

Supongamos que tengo lo siguiente:

id | nombre | grupo
-----------------------------------
1 | pepe | rojo
2 | paco | verde
3 | maría | rojo
4 | jorge | verde
5 | pablo | azul

La idea es mostrar un sólo elemento de cada grupo y que sea el de mayor id. Lo que
yo tengo(simplificando) es algo así pero me muestra el primero de cada grupo y no el de mayor id:

SELECT *
FROM tabla
GROUP BY id
ORDER BY p.fecha DESC
LIMIT 1
  #2 (permalink)  
Antiguo 14/09/2011, 15:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Obtener último elemento de un GROUP BY

SELECT t1.id, t1.nombre, t1.grupo FROM (SELECT id, nombre, grupo
FROM tabla
ORDER BY grupo, p.id DESC)t1 GROUP BY t1.grupo
  #3 (permalink)  
Antiguo 15/09/2011, 15:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Obtener último elemento de un GROUP BY

A ver voy a explicar la consulta entera porqué sino creo que no voy a ser capaz a hacerlo. Lo que quiero es algo como la pantalla de gmail, es decir, me salen los usuarios agrupados y se muestra en la pestaña el último mensaje de esa conversación y su fecha. Por lo tanto si tengo algo así:

id_mensaje | contenido | id_grupo | fecha

1 | dsakfhd | a | 03-04-2011
2 | fdasf | b | 03-04-2011
3 | adf d | a | 03-04-2011
4 | adsf | c | 04-04-2011
5 | fdsa | d | 04-04-2011
6 | adsf | d | 07-04-2011
7 | afsdfd | c | 08-04-2011

Necesito la consulta que me de esto:

7 | afsdfd | c | 08-04-2011
6 | adsf | d | 07-04-2011
2 | fdasf | b | 03-04-2011
3 | adf d | a | 03-04-2011

No sé si consigo explicar lo que necesito pero gracias de todos modos.
  #4 (permalink)  
Antiguo 16/09/2011, 11:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Obtener último elemento de un GROUP BY

Pinchu,
prueba esto y nos dices:
SELECT t1.id_mensaje, t1.contenido, t1.id_grupo, t1.fecha FROM (SELECT id_mensaje, contenido, id_grupo, fecha FROM `tabla` ORDER BY id_grupo, fecha DESC)t1 group by t1.id_grupo

Última edición por jurena; 17/09/2011 a las 14:16
  #5 (permalink)  
Antiguo 17/09/2011, 10:01
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Obtener último elemento de un GROUP BY

Muchas gracias, entendí la consulta y me funcionó.
  #6 (permalink)  
Antiguo 21/09/2011, 11:26
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Obtener último elemento de un GROUP BY

Gracias Jurena por tu respuesta, me ha sido muy útil.

Tengo una cuestión relacionada con este mismo tema que no sé cómo resolver.

Imaginemos que en la tabla que nos propone pinchu la columna 'contenido' es un número y que existe una segunda tabla donde se explica ese contenido, algo parecido a esto:

id_contenido | contenido
1 | fadaf
2 | adfasf
3 | adadf
4 | terttt

donde la columna 'contenido' de la primera tabla de pinchu está relacionada con la columna 'id_contenido' de la segunda tabla que propongo.

¿Cómo planteamos ahora la consulta a través de un INNER JOIN para mostrar el resultado?

¡Gracias!

Etiquetas: group, 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 18:44.