Här är en annan version som fungerar med MySQL-variabler och som inte kräver 3-nivås kapsling. Den första försorterar posterna i ordning efter postID och datum och tilldelar dem ett sekventiellt nummer per grupp närhelst ett värde ändras i en av post-id, typ och/eller åtgärd. Från det är det en enkel grupp genom att... ingen jämför skivversion T med T2 till T3... tänk om du ville ha 4 eller 5 kriterier... skulle du behöva kapsla ännu fler poster?, eller bara lägga till 2 fler @ sql-variabler till jämförelsetestet...
Ditt samtal om vilket är mer effektivt...
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
Här är min länk till SQLFiddle-exempel
För titeln kanske du vill justera linjen...
group_concat( distinct PreQuery.Title ) som titlar,
Åtminstone kommer detta att ge DISTINKT titlar sammanlänkade... mycket svårare att bli släppt utan att kapsla hela den här frågan en nivå till genom att ha det maximala frågedatumet och andra element för att få den ena titeln associerad med det maxdatumet enligt alla kriterier.