sql >> Base de Datos >  >> RDS >> Mysql

Grupo MySQL por filas consecutivas

Aquí hay otra versión que funciona con MySQL Variables y no requiere anidamiento de 3 niveles de profundidad. El primero preordena los registros en orden por ID de publicación y Fecha y les asigna un número secuencial por grupo cada vez que cambia un valor en una de las ID de publicación, Tipo y/o acción. A partir de eso, es un grupo simple por... no comparar la versión de registro T con T2 con T3... ¿qué pasaría si quisiera 4 o 5 criterios... tendría que anidar aún más entradas?, o simplemente agregar 2 más @ variables sql a la prueba de comparación...

Su decisión sobre cuál es más eficiente...

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    

Aquí está mi enlace a la muestra de SQLFiddle

Para el título, es posible que desee ajustar la línea...

group_concat (PreQuery.Title distinto) como Títulos,

Al menos esto dará títulos DISTINTOS concatenados... mucho más difícil de conseguir sin anidar toda esta consulta un nivel más al tener la fecha máxima de consulta y otros elementos para obtener el título asociado con esa fecha máxima según todos los criterios.