Hier ist eine andere Version, die mit MySQL-Variablen funktioniert und keine 3-stufige Verschachtelung erfordert. Die erste sortiert die Datensätze nach Post-ID und Datum vor und weist ihnen eine fortlaufende Nummer pro Gruppe zu, wenn sich ein Wert in Post-ID, Typ und/oder Aktion ändert. Daraus ergibt sich eine einfache Gruppierung nach ... kein Vergleich der Datensatzversion T mit T2 mit T3 ... was wäre, wenn Sie 4 oder 5 Kriterien wollten ... müssten Sie noch mehr Einträge verschachteln? Oder fügen Sie einfach 2 weitere hinzu @ sql-Variablen zum Vergleichstest...
Ihr Anruf, was effizienter ist...
select
PreQuery.postID,
PreQuery.PostType,
PreQuery.Target,
PreQuery.Action,
PreQuery.Title,
min( PreQuery.Date ) as FirstActionDate,
max( PreQuery.Date ) as LastActionDate,
count(*) as ActionEntries,
group_concat( PreQuery.content ) as Content
from
( select
t.*,
@lastSeq := if( t.action = @lastAction
AND t.postID = @lastPostID
AND t.postType = @lastPostType, @lastSeq, @lastSeq +1 ) as ActionSeq,
@lastAction := t.action,
@lastPostID := t.postID,
@lastPostType := t.PostType
from
t,
( select @lastAction := ' ',
@lastPostID := 0,
@lastPostType := ' ',
@lastSeq := 0 ) sqlVars
order by
t.postid,
t.date ) PreQuery
group by
PreQuery.postID,
PreQuery.ActionSeq,
PreQuery.PostType,
PreQuery.Action
Hier ist mein Link zum SQLFiddle-Beispiel
Für den Titel möchten Sie vielleicht die Zeile anpassen...
group_concat (distinct PreQuery.Title) als Titel,
Zumindest werden dadurch DISTINCT-Titel verkettet ... viel schwieriger zu erhalten, ohne diese gesamte Abfrage eine weitere Ebene zu verschachteln, indem das maximale Abfragedatum und andere Elemente vorhanden sind, um den einen Titel zu erhalten, der diesem maximalen Datum für alle Kriterien zugeordnet ist.