Đây là một phiên bản khác hoạt động với Biến MySQL và không yêu cầu lồng sâu 3 cấp. Cái đầu tiên sắp xếp trước các bản ghi theo thứ tự postID và Date và gán chúng một số tuần tự cho mỗi nhóm bất cứ khi nào bất kỳ lúc nào giá trị thay đổi trong một trong các Post ID, Loại và / hoặc hành động. Từ đó, nó là một nhóm đơn giản bằng cách ... không so sánh phiên bản bản ghi T với T2 với T3 ... điều gì sẽ xảy ra nếu bạn muốn 4 hoặc 5 tiêu chí ... bạn sẽ phải lồng nhiều mục nhập hơn nữa ?, hay chỉ thêm 2 nữa @ các biến sql để kiểm tra so sánh ...
Cuộc gọi của bạn dựa trên đó hiệu quả hơn ...
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
Đây là liên kết tới mẫu SQLFiddle của tôi
Đối với tiêu đề, bạn có thể muốn điều chỉnh dòng ...
group_concat (PreQuery.Title riêng biệt) làm Tiêu đề,
Ít nhất điều này sẽ cung cấp cho tiêu đề DISTINCT được nối liền với nhau ... khó hơn nhiều để cho phép mà không lồng toàn bộ truy vấn này lên một cấp nữa bằng cách đặt ngày truy vấn tối đa và các yếu tố khác để có được một tiêu đề được liên kết với ngày tối đa đó theo tất cả các tiêu chí.