Padłeś ofiarą luźnych reguł MySQL, które pozwalają na uwzględnienie nieagregatów w zapytaniu GROUP BY. Jasne, pracujesz z MIN lub MAX i tylko JEDEN na raz, ale rozważ następujące zapytanie:
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
Zastanów się teraz, który wiersz z której powinna pochodzić kolumna stanu. Absurdem jest umieszczanie korelacji między agregacją (te w grupie GROUP BY) a kolumnami bez agregacji.
Zamiast tego napisz zapytanie w ten sposób
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
Ale jeśli masz dwa rekordy z tym samym created_timestamp, będzie to jeszcze trudniejsze
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