どれくらい速くなるかわかりませんが、次のように解決できると思います:
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)
null以外のすべてのエントリをカウントし、count(*)
と等しい場合 つまり、null値はなく、max(cancel_date)
を返します。 、それ以外の場合はnull。