Anda telah menjadi mangsa aturan lemah MySQL yang memungkinkan non-agregat untuk dimasukkan dalam kueri GROUP BY. Tentu, Anda bekerja dengan MIN atau MAX, dan hanya SATU sekaligus, tetapi pertimbangkan kueri ini:
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
Sekarang, pikirkan tentang baris yang mana kolom status harus berasal. Tidak masuk akal untuk menempatkan korelasi antara agregat (yang ada di GROUP BY) dan kolom non-agregat.
Sebagai gantinya, tulis kueri Anda seperti ini
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
Tetapi jika Anda memiliki dua catatan dengan stempel waktu_created yang sama, itu akan menjadi lebih rumit
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