2012-05-25 15 views
6

Refiriéndose a mis preguntas anteriores sobre el concat grupo Mysql again, group by and display rest of rowsSeleccionar primera y última fila de GROUP_CONCAT al agrupar días se pueden ordenar

Necesito conseguir el primero y último día de esa consulta

por ejemplo

row 3 from 8,9,10 to first collumn 8, last collumn 10 
row 5 from 21,22,23,24,28,29,30 to first collumn 21, last collumn 30 
row 6 from 17,21,22,23,24,25 to first collumn 17 last collumn 25 

SUBSTR(GROUP_CONCAT(DAY),-1) as fl 

PERO me da el último carácter, y hay pocas filas con 1 o 2 caracteres, por ejemplo

1,2,3,22 
1,3,6,3 

En primer ejemplo que me gaves 2, no 22:/

Respuesta

2

No pierda su tiempo tratando de analizar el primer y el último en marcharse de GROUP_CONCAT(). En su lugar, simplemente pegue el MIN() y MAX() junto con CONCAT().

SELECT 
    user, 
    CONCAT(MIN(DAY)), ',', MAX(DAY)) AS f1 
FROM yourtable 
GROUP BY user 
+0

¿el mínimo y el máximo se comportan como el "primero" y el "último" o se comportan como suena su nombre? – Jus12

+0

@ Jus12 Son [el agregado 'MIN()/MAX()'] (http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html) por lo que son como sonido, los valores mínimos y máximos por grupo 'usuario'. –

+0

Me gusta esto, pero la solución es muy específica si los datos están ordenados por fecha y la pregunta parece más genérica "seleccionar la primera y la última fila del grupo concat". Idealmente, debería haber una forma de seleccionar el primer y el último elemento sin ordenar. ¿Hay algo por el estilo? – Jus12

6

Otra opción (además de la solución de Michael) es utilizar el SUBSTRING_INDEX:

SUBSTRING_INDEX(str,delim,count) 

con

count = 1 

se obtiene el primer día,

con

count=-1 

obtienes la última

+0

"Gracias Mario" ;-) – breq

+0

¿me quieres explicar también? no lo entiendo – Th0rndike

Cuestiones relacionadas