sql >> Databáze >  >> RDS >> Mysql

Seskupit MySQL podle po sobě jdoucích řádků

Zde je další verze, která pracuje s proměnnými MySQL a nevyžaduje vnoření do hloubky 3 úrovní. První z nich předtřídí záznamy v pořadí podle postID a Date a přiřadí jim pořadové číslo na skupinu, kdykoli se změní hodnota v jednom z Post ID, Type a/nebo akce. Z toho je to jednoduchá skupina podle... žádné srovnávání verzí záznamu T až T2 až T3... co kdybyste chtěli 4 nebo 5 kritérií... museli byste vnořit ještě více záznamů?, nebo prostě přidat 2 další @ sql proměnné do srovnávacího testu...

Váš hovor, který je efektivnější...

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    

Zde je můj odkaz na ukázku SQLFiddle

U nadpisu možná budete chtít upravit řádek...

group_concat( odlišné PreQuery.Title ) jako tituly,

Přinejmenším to poskytne DISTINCT nadpisům zřetězené... mnohem obtížnější nechat se propustit bez vnoření celého tohoto dotazu o další úroveň díky maximálnímu datu dotazu a dalším prvkům pro získání jediného názvu spojeného s tímto maximálním datem podle všech kritérií.



  1. SQL Server Sledování běžících dotazů

  2. Podporuje PostgreSQL kolace bez přízvuku?

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Po uzavření připojení nejsou povoleny žádné operace

  4. Vzdálené připojení MySQL se nezdaří s neznámou metodou ověřování