2012-05-25 1 views
6

Mit Bezug auf meine früheren Anfragen über die Gruppe concat Mysql again, group by and display rest of rowserste und die letzte Zeile von Group_concat wenn sortierbar Tagen Gruppierung

i ersten und letzten Tag von dieser Abfrage erhalten müssen

zum Beispiel

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 

ABER es gibt mir letzte Char, und es gibt einige Zeilen mit 1 oder 2 Zeichen zum Beispiel

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

Im ersten Beispiel es gaves me 2, nicht 22:/

Antwort

2

Vergeuden Sie nicht Ihre Zeit versuchen, die ersten zu analysieren und aus dem GROUP_CONCAT() dauern. Stattdessen stecken Sie einfach die MIN() und MAX() zusammen mit CONCAT().

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

Tun die Min und Max verhalten sich wie die "erste" und "letzte" oder verhalten sie sich wie ihr Name klingt wie? – Jus12

+0

@ Jus12 Sie sind [die Summe 'MIN()/MAX() '] (http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html), so sind sie wie sie Sound, die geringsten und größten Werte pro Benutzergruppe. –

+0

Ich mag das, aber die Lösung ist sehr spezifisch, wenn die Daten nach Datum angeordnet sind und die Frage allgemeiner scheint "wähle erste und letzte Zeile aus der Gruppe concat". Idealerweise sollte es möglich sein, die ersten und letzten Elemente ohne Sortierung auszuwählen. Gibt es so etwas? – Jus12

6

Eine weitere Option (neben Michael-Lösung) ist es, die SUBSTRING_INDEX zu verwenden:

SUBSTRING_INDEX(str,delim,count) 

mit

count = 1 

Sie den ersten Tag erhalten,

mit

count=-1 

Sie erhalten die letzte

+0

"Vielen Dank Mario" ;-) – breq

+0

sorge mich auch zu erklären? Ich verstehe es nicht – Th0rndike

Verwandte Themen