Nie wiem, jak szybko to będzie, ale myślę, że można to rozwiązać w ten sposób:
SELECT ID, min(ORDER_DATE) AS OD,
IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD
FROM stats GROUP BY CLIENT
Nie mogłem tego przetestować, ale idea tego rozwiązania jest taka, że count(cancel_date)
powinien zliczać wszystkie niezerowe wpisy wartości i jeśli jest równy count(*)
oznacza to, że nie ma wartości null i zwróci max(cancel_date)
, w przeciwnym razie null.