Не знам колко бързо ще бъде, но предполагам, че може да се реши по следния начин:
SELECT ID, min(ORDER_DATE) AS OD,
IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD
FROM stats GROUP BY CLIENT
Не можах да го тествам, но идеята зад това решение е, че count(cancel_date)
трябва да отчита всички записи, които не са нулеви стойности и ако е равно на count(*)
това означава, че няма нулеви стойности и ще върне max(cancel_date)
, иначе нула.