Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Gruppe nach aufeinanderfolgenden Zeilen

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.