Bạn đã trở thành con mồi của các quy tắc lỏng lẻo của MySQL cho phép đưa các tập hợp không vào truy vấn GROUP BY. Chắc chắn, bạn đang làm việc với MIN hoặc MAX và chỉ MỘT tại một thời điểm, nhưng hãy xem xét truy vấn này:
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
Bây giờ, hãy nghĩ về hàng nào cột trạng thái sẽ đến từ đâu. Thật vô lý khi đặt mối tương quan giữa cột tổng hợp (những cột trong GROUP BY) và cột không tổng hợp.
Thay vào đó, hãy viết truy vấn của bạn như thế này
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
Nhưng nếu bạn có hai bản ghi với cùng một create_timestamp, nó thậm chí còn phức tạp hơn
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