È un po' brutto ma perché NULL
s hanno un significato speciale per te, questo è il modo più pulito in cui posso pensare di farlo:
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
Cioè, se qualsiasi riga ha un NULL
, vogliamo forzare che sia la risposta. Solo se nessuna riga contiene un NULL
dovremmo restituire il MIN
(o MAX
).