Je ne sais pas à quelle vitesse ce sera, mais je suppose que cela peut être résolu comme ceci :
SELECT ID, min(ORDER_DATE) AS OD,
IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD
FROM stats GROUP BY CLIENT
Je n'ai pas pu le tester mais l'idée derrière cette solution est que count(cancel_date)
doit compter toutes les entrées de valeur non nulle et si elle est égale à count(*)
cela signifie qu'il n'y a pas de valeurs nulles et qu'il renverra max(cancel_date)
, sinon nul.