आप MySQL के ढीले नियमों के शिकार हो गए हैं जो गैर-समुच्चय को GROUP BY क्वेरी में शामिल करने की अनुमति देते हैं। ज़रूर, आप MIN या MAX के साथ काम कर रहे हैं, और केवल एक एक बार में, लेकिन इस प्रश्न पर विचार करें:
SELECT
CONCAT(work_type, work_id) AS condition_id,
status,
MIN(created_timestamp) as earliest,
MAX(created_timestamp) as latest
FROM conditions
GROUP BY condition_id
अब, सोचें कि कौन सी पंक्ति स्थिति कॉलम से आना चाहिए। एग्रीगेट (ग्रुप बाय में मौजूद) और नॉन-एग्रीगेट कॉलम के बीच संबंध रखना बेतुका है।
इसके बजाय, अपनी क्वेरी इस तरह लिखें
SELECT X.condition_id, C.status, X.earliest
FROM (
SELECT
CONCAT(work_type, work_id) AS condition_id,
status,
MIN(created_timestamp) as earliest
FROM conditions
GROUP BY condition_id
) X JOIN conditions C
on CONCAT(c.work_type, c.work_id) = X.condition_id
and c.created_timestamp = X.earliest
लेकिन अगर आपके पास एक ही create_timestamp के साथ दो रिकॉर्ड हैं, तो यह और भी मुश्किल हो जाता है
SELECT X.condition_id, Max(C.status) status, X.earliest
FROM (
SELECT
CONCAT(work_type, work_id) AS condition_id,
status,
MIN(created_timestamp) as earliest
FROM conditions
GROUP BY condition_id
) X JOIN conditions C
on CONCAT(c.work_type, c.work_id) = X.condition_id
and c.created_timestamp = X.earliest
GROUP BY X.condition_id, X.earliest