これは、MySQL変数で動作し、3レベルのネストを必要としない別のバージョンです。最初のレコードは、postIDとDateの順にレコードを事前に並べ替え、Post ID、タイプ、アクションのいずれかで値が変更されるたびに、グループごとに連番を割り当てます。それから、それは単純なグループです...レコードバージョンTとT2とT3を比較しません... 4つまたは5つの基準が必要な場合はどうなりますか...さらに多くのエントリをネストする必要がありますか?比較テストへの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
これが私の
タイトルについては、行を調整することをお勧めします...
group_concat(distinct PreQuery.Title)as Titles、
少なくともこれにより、DISTINCTタイトルが連結されます...すべての基準ごとに最大クエリ日付と他の要素を使用してその最大日付に関連付けられた1つのタイトルを取得することにより、このクエリ全体をもう1つのレベルにネストせずに、許可するのははるかに困難になります。
>