É um pouco feio, mas porque o
NULL
s têm um significado especial para você, esta é a maneira mais limpa que posso pensar de fazer isso:SELECT recordid, MIN(startdate),
CASE WHEN MAX(CASE WHEN enddate IS NULL THEN 1 ELSE 0 END) = 0
THEN MAX(enddate)
END
FROM tmp GROUP BY recordid
Ou seja, se alguma linha tiver um
NULL
, queremos forçar que seja a resposta. Somente se nenhuma linha contiver um NULL
devemos retornar o MIN
(ou MAX
).