यहां एक और संस्करण है जो MySQL वेरिएबल्स के साथ काम करता है और इसके लिए 3 लेवल नेस्टिंग डीप की आवश्यकता नहीं है। पहला पोस्ट आईडी और दिनांक के अनुसार रिकॉर्ड को पूर्व-क्रमबद्ध करता है और जब भी पोस्ट आईडी, प्रकार और/या क्रिया में से किसी एक में कोई मान बदलता है तो उन्हें प्रति समूह एक अनुक्रमिक संख्या प्रदान करता है। उस से, इसका एक सरल समूह ... कोई रिकॉर्ड संस्करण T से T2 से T3 की तुलना नहीं कर रहा है ... क्या होगा यदि आप 4 या 5 मानदंड चाहते हैं ... क्या आपको और भी प्रविष्टियां घोंसला बनाना होगा?, या बस 2 और जोड़ें @ तुलना परीक्षण के लिए एसक्यूएल चर...
आपका कॉल जिस पर अधिक कुशल है...
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
यह रहा मेरा SQLFiddle नमूना का लिंक
शीर्षक के लिए, आप पंक्ति को समायोजित करना चाह सकते हैं...
group_concat (विशिष्ट PreQuery.Title) शीर्षक के रूप में,
कम से कम यह DISTINCT शीर्षकों को संयोजित कर देगा... अधिकतम क्वेरी दिनांक और अन्य तत्वों को सभी मानदंडों के अनुसार उस अधिकतम तिथि से संबद्ध एक शीर्षक प्राप्त करने के द्वारा इस संपूर्ण क्वेरी को एक और स्तर पर नेस्ट किए बिना प्राप्त करना बहुत कठिन है।