Vous avez été la proie des règles laxistes de MySQL qui permettent d'inclure des non-agrégats dans une requête GROUP BY. Bien sûr, vous travaillez avec MIN ou MAX, et seulement ONE à la fois, mais réfléchissez à cette requête :
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
Maintenant, pensez à quelle ligne la colonne d'état doit provenir. Il est absurde de mettre une corrélation entre les colonnes agrégées (celles du GROUP BY) et non agrégées.
Au lieu de cela, écrivez votre requête comme ceci
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
Mais si vous avez deux enregistrements avec le même created_timestamp, cela devient encore plus délicat
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