Saya tidak tahu seberapa cepat itu akan tetapi saya kira itu bisa diselesaikan seperti ini:
SELECT ID, min(ORDER_DATE) AS OD,
IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD
FROM stats GROUP BY CLIENT
Saya tidak dapat mengujinya tetapi ide di balik solusi ini adalah count(cancel_date)
harus menghitung semua entri bukan nilai nol dan jika sama dengan count(*)
itu berarti tidak ada nilai null dan akan mengembalikan max(cancel_date)
, jika tidak null.