sql >> Databasteknik >  >> RDS >> Mysql

MySQL-grupp efter rader i följd

Här är en annan version som fungerar med MySQL-variabler och som inte kräver 3-nivås kapsling. Den första försorterar posterna i ordning efter postID och datum och tilldelar dem ett sekventiellt nummer per grupp närhelst ett värde ändras i en av post-id, typ och/eller åtgärd. Från det är det en enkel grupp genom att... ingen jämför skivversion T med T2 till T3... tänk om du ville ha 4 eller 5 kriterier... skulle du behöva kapsla ännu fler poster?, eller bara lägga till 2 fler @ sql-variabler till jämförelsetestet...

Ditt samtal om vilket är mer 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    

Här är min länk till SQLFiddle-exempel

För titeln kanske du vill justera linjen...

group_concat( distinct PreQuery.Title ) som titlar,

Åtminstone kommer detta att ge DISTINKT titlar sammanlänkade... mycket svårare att bli släppt utan att kapsla hela den här frågan en nivå till genom att ha det maximala frågedatumet och andra element för att få den ena titeln associerad med det maxdatumet enligt alla kriterier.



  1. SQL:Returnerar det vanligaste värdet för varje person

  2. Vilken är den korrekta SQL-typen för att lagra en .Net Timespan med värden> 24:00:00?

  3. Hur gör man en accent och skiftlägesokänslig sökning i MediaWiki-databasen?

  4. SQL-anslutningsfråga