Không chắc chắn những gì bạn đang cố gắng làm. Nhưng bạn có thể gói truy vấn của mình thành một truy vấn con mà không cần range_day
trong mệnh đề GROUP BY. Sau đó, sử dụng mệnh đề GROUP BY của bạn trong truy vấn bên ngoài như nó vốn có.
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
Tuy nhiên - bạn chọn context
không có tổng hợp sẽ không được liệt kê trong mệnh đề GROUP BY. Vì vậy, bạn sẽ nhận được một số giá trị "ngẫu nhiên" từ nhóm. Ở chế độ nghiêm ngặt, truy vấn sẽ không thành công.