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í.