sql >> Database >  >> RDS >> Mysql

MySQL-groep op opeenvolgende rijen

Hier is nog een versie die werkt met MySQL-variabelen en waarvoor geen nesting op 3 niveaus nodig is. De eerste sorteert de records vooraf op postID en Datum en kent ze een volgnummer per groep toe wanneer een waarde verandert in een van de Post-ID, Type en/of actie. Van daaruit is het een eenvoudige groep door... geen vergelijking van recordversie T met T2 tot T3... wat als je 4 of 5 criteria zou willen... zou je nog meer items moeten nesten?, of gewoon nog 2 @ toevoegen @ sql-variabelen naar de vergelijkingstest...

Uw oproep waarop efficiënter is...

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 is mijn link naar SQLFiddle-voorbeeld

Voor de titel wil je misschien de regel aanpassen...

group_concat( distinct PreQuery.Title ) als titels,

Dit geeft in ieder geval DISTINCT-titels aaneengeschakeld... veel moeilijker om verhuurd te worden zonder deze hele zoekopdracht nog een niveau te nesten door de maximale zoekdatum en andere elementen te hebben om die ene titel te krijgen die is gekoppeld aan die maximale datum volgens alle criteria.



  1. De uitdaging zit erop! Community-oproep voor het maken van de snelste nummerreeksgenerator

  2. SQLite in Android:buitenlandse sleutels en <tabelbeperking> verwacht

  3. Verschil tussen NullIf() en IfNull() in SQLite

  4. connect ECONNREFUSED - node js , sql