Hier is nog een versie die werkt met MySQL-variabelen en waarvoor geen nesting op 3 niveaus nodig is. De eerste sorteert de records vooraf op postID en Datum en kent ze een volgnummer per groep toe wanneer een waarde verandert in een van de Post-ID, Type en/of actie. Van daaruit is het een eenvoudige groep door... geen vergelijking van recordversie T met T2 tot T3... wat als je 4 of 5 criteria zou willen... zou je nog meer items moeten nesten?, of gewoon nog 2 @ toevoegen @ sql-variabelen naar de vergelijkingstest...
Uw oproep waarop efficiënter is...
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
Hier is mijn link naar SQLFiddle-voorbeeld
Voor de titel wil je misschien de regel aanpassen...
group_concat( distinct PreQuery.Title ) als titels,
Dit geeft in ieder geval DISTINCT-titels aaneengeschakeld... veel moeilijker om verhuurd te worden zonder deze hele zoekopdracht nog een niveau te nesten door de maximale zoekdatum en andere elementen te hebben om die ene titel te krijgen die is gekoppeld aan die maximale datum volgens alle criteria.