No sé qué tan rápido será, pero supongo que se puede resolver así:
SELECT ID, min(ORDER_DATE) AS OD,
IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD
FROM stats GROUP BY CLIENT
No pude probarlo, pero la idea detrás de esta solución es que count(cancel_date)
debe contar todas las entradas de valores no nulos y si es igual a count(*)
eso significa que no hay valores nulos y devolverá max(cancel_date)
, de lo contrario, nulo.