Es un poco feo pero porque el NULL
tiene un significado especial para ti, esta es la forma más limpia que se me ocurre de hacerlo:
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
Es decir, si alguna fila tiene un NULL
, queremos forzar que esa sea la respuesta. Solo si ninguna fila contiene un NULL
deberíamos devolver el MIN
(o MAX
).