Ето още една версия, която работи с 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 заглавия, свързани... много по-трудно да бъдат пуснати, без да влагате цялата тази заявка още едно ниво, като имате максимална дата на заявка и други елементи, за да получите едното заглавие, свързано с тази максимална дата за всички критерии.