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

Ordenar en el group by

Estas en el tema de Ordenar en el group by en el foro de Mysql en Foros del Web. Hola, tengo una consulta que no me acaba de salir. Tengo dos tablas: líneas y páginas. 1 página puede tener N líneas. Páginas : (id) ...
  #1 (permalink)  
Antiguo 15/03/2009, 11:49
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Ordenar en el group by

Hola, tengo una consulta que no me acaba de salir.

Tengo dos tablas: líneas y páginas. 1 página puede tener N líneas.

Páginas : (id)
Lineas : (id, pagina, fecha)

Yo, lo que quiero, es un listado de las últimas líneas de cada página pero que no se repita ninguna página en el listado. Tengo la siguiente consulta:
Código:
SELECT LIN.*
FROM lineas AS LIN
LEFT JOIN paginas AS PAG ON LIN.pagina = PAG.id
GROUP BY LIN.pagina
ORDER BY LIN.fecha DESC
Esta consulta me devuelve líneas de cada pagina pero no me muestra las últimas líneas de cada página.

Alguna ayuda? Gracias.
  #2 (permalink)  
Antiguo 15/03/2009, 14:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar en el group by

Código sql:
Ver original
  1. SELECT lineas.id, lineas.pagina, lineas.fecha FROM lineas
  2.   INNER JOIN (SELECT pagina, MAX(id) maximo FROM lineas GROUP BY pagina)t1
  3.     ON lineas.id = t1.maximo AND lineas.pagina = t1.pagina
  4.  ORDER BY lineas.fecha DESC

No lo he probado, Jerkan, pero creo que te valdrá. Entiendo que toda página tendrá una línea, por lo que no hay que usar el left join: podemos usar INNER JOIN. Por otra parte, parece que todos los datos están en la tabla lineas, por lo que no es necesario recurrir a la primera tabla, a la tabla páginas.

Última edición por jurena; 15/03/2009 a las 15:01
  #3 (permalink)  
Antiguo 16/03/2009, 16:55
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Ordenar en el group by

Muchas gracias, jurena.

La verdad es que no entiendo my bien cómo está montada la query pero el caso es que funciona!
  #4 (permalink)  
Antiguo 16/03/2009, 17:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar en el group by

Con esto averiguo el máximo de líneas por página y le doy como nombre alias t1:
SELECT pagina, MAX(id) maximo FROM lineas GROUP BY pagina
Luego hago un cruce con INNER JOIN entre la tabla líneas completa con esa selección, haciendo coincidir el número de líneas con el número máximo, y la página de la tabla con la de la selección.
SELECT lineas.id, lineas.pagina, lineas.fecha FROM lineas... ON lineas.id = t1.maximo AND lineas.pagina = t1.pagina

lo que me permite luego ordenar por fecha
ORDER BY lineas.fecha DESC
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

SíEste tema le ha gustado a 1 personas




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