Her er en anden version, der fungerer med MySQL-variabler og ikke kræver 3 niveaus nesting dyb. Den første forudsorterer posterne i rækkefølge efter postID og Dato og tildeler dem et sekventielt nummer pr. gruppe, når som helst en værdi ændres i en af Post ID, Type og/eller handling. Ud fra det er det en simpel gruppe ved... ingen sammenligning af rekordversion T med T2 til T3... hvad nu hvis du ville have 4 eller 5 kriterier... skulle du indlejre endnu flere poster?, eller bare tilføje 2 flere @ sql-variabler til sammenligningstesten...
Din opfordring til, hvad der er mere 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
Her er mit link til SQLFiddle-eksempel
For titlen vil du måske justere linjen...
group_concat( distinct PreQuery.Title ) som titler,
Dette vil i det mindste give DISTINKT titler sammenkædet... meget sværere at få udlejet uden at indlejre hele denne forespørgsel et niveau mere ved at have den maksimale forespørgselsdato og andre elementer for at få den ene titel forbundet med den maksimale dato ifølge alle kriterier.