Inilah versi lain yang berfungsi dengan Variabel MySQL dan tidak memerlukan kedalaman 3 level bersarang. Yang pertama mengurutkan catatan berdasarkan postID dan Tanggal dan menetapkan mereka nomor urut per grup setiap kali nilai berubah di salah satu Post ID, Jenis dan/atau tindakan. Dari itu, Ini adalah grup sederhana dengan... tidak membandingkan catatan versi T ke T2 hingga T3... bagaimana jika Anda menginginkan 4 atau 5 kriteria... apakah Anda harus membuat lebih banyak entri lagi?, atau hanya menambahkan 2 lagi @ variabel sql untuk uji perbandingan...
Panggilan Anda yang lebih efisien...
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
Ini tautan saya ke contoh SQLFiddle
Untuk judul, Anda mungkin ingin menyesuaikan baris...
group_concat( PreQuery.Title berbeda) sebagai Judul,
Setidaknya ini akan memberikan judul DISTINCT yang digabungkan... jauh lebih sulit untuk dibiarkan tanpa menyarangkan seluruh kueri ini satu tingkat lagi dengan memiliki tanggal kueri maksimal dan elemen lain untuk mendapatkan satu judul yang terkait dengan tanggal maksimal per semua kriteria.