Tôi không biết nó sẽ nhanh như thế nào nhưng tôi đoán nó có thể được giải quyết như thế này:
SELECT ID, min(ORDER_DATE) AS OD,
IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD
FROM stats GROUP BY CLIENT
Tôi không thể kiểm tra nó nhưng ý tưởng đằng sau giải pháp này là count(cancel_date)
nên đếm tất cả các mục nhập giá trị không rỗng và nếu nó bằng count(*)
điều đó có nghĩa là không có giá trị null nào và nó sẽ trả về max(cancel_date)
, nếu không thì null.