सुनिश्चित नहीं है कि आप क्या करने की कोशिश कर रहे हैं। लेकिन आप range_day
. के बिना अपनी क्वेरी को सबक्वेरी में लपेट सकते हैं ग्रुप बाय क्लॉज में। फिर बाहरी क्वेरी में अपने ग्रुप बाय क्लॉज का उपयोग करें।
SELECT SUM(score) score,
type,
context, -- WARNING! Not listed in group by clause
post_id,
table_code,
comment_id,
MIN(seen) seen,
MAX(d_t) d_t,
range_day
FROM (
SELECT SUM(score) score,
MAX(id) as id,
type,
context, -- WARNING! Not listed in group by clause
post_id,
e.table_code,
comment_id,
MIN(seen) seen,
MAX(date_time) d_t,
(CASE WHEN FROM_UNIXTIME(MAX(date_time)) >= CURDATE() THEN 'today'
WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 'yesterday'
WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'in last week'
ELSE 'in last month'
END) as range_day
FROM `events` e
WHERE e.id IN ($ids)
GROUP BY type, post_id, e.table_code, comment_id
) sub
GROUP BY type, post_id, table_code, comment_id, range_day
ORDER BY seen, MAX(d_t) desc, MAX(id) desc
हालांकि - आप context
. का चयन करें बिना एग्रीगेशन के जो ग्रुप बाय क्लॉज में सूचीबद्ध नहीं है। इस प्रकार आपको समूह से कुछ "यादृच्छिक" मान मिलेगा। सख्त मोड में क्वेरी विफल हो जाएगी।