Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL групиране по последователни редове

Ето още една версия, която работи с MySQL променливи и не изисква дълбоко влагане на 3 нива. Първият сортира предварително записите в ред по postID и Date и им присвоява пореден номер на група всеки път, когато стойността се промени в един от Post ID, Тип и/или действие. От това, това е проста група чрез... без сравняване на версия на запис T с T2 и T3... ами ако искате 4 или 5 критерия... ще трябва ли да вложите още повече записи?, или просто да добавите още 2 @ sql променливи към сравнителния тест...

Вашето обаждане кое е по-ефективно...

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    

Ето моята връзка към примера на SQLFiddle

За заглавието може да искате да коригирате реда...

group_concat( различен PreQuery.Title ) като заглавия,

Най-малкото това ще даде DISTINCT заглавия, свързани... много по-трудно да бъдат пуснати, без да влагате цялата тази заявка още едно ниво, като имате максимална дата на заявка и други елементи, за да получите едното заглавие, свързано с тази максимална дата за всички критерии.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - CASE срещу IF оператор срещу функция IF

  2. MySQL:Изберете редове с повече от едно срещане

  3. Показване (списък) MySQL бази данни на Linux чрез командния ред

  4. Как да разрешите грешката на MySQL max_user_connections

  5. Емоджитата не се вмъкват в възела на базата данни js mysql