sql >> Database teknologi >  >> RDS >> Mysql

MySQL-gruppe efter på hinanden følgende rækker

Her er en anden version, der fungerer med MySQL-variabler og ikke kræver 3 niveaus nesting dyb. Den første forudsorterer posterne i rækkefølge efter postID og Dato og tildeler dem et sekventielt nummer pr. gruppe, når som helst en værdi ændres i en af ​​Post ID, Type og/eller handling. Ud fra det er det en simpel gruppe ved... ingen sammenligning af rekordversion T med T2 til T3... hvad nu hvis du ville have 4 eller 5 kriterier... skulle du indlejre endnu flere poster?, eller bare tilføje 2 flere @ sql-variabler til sammenligningstesten...

Din opfordring til, hvad der er mere effektivt...

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    

Her er mit link til SQLFiddle-eksempel

For titlen vil du måske justere linjen...

group_concat( distinct PreQuery.Title ) som titler,

Dette vil i det mindste give DISTINKT titler sammenkædet... meget sværere at få udlejet uden at indlejre hele denne forespørgsel et niveau mere ved at have den maksimale forespørgselsdato og andre elementer for at få den ene titel forbundet med den maksimale dato ifølge alle kriterier.



  1. Fejl 1033 modtog log på standby

  2. Få årets dag fra en dato i SQL Server (T-SQL)

  3. PHP &mySQL:Hvornår skal man helt præcist bruge htmlentities?

  4. MySQL :er ikke i GROUP BY