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.