WITH limits AS
(
SELECT COALESCE(@startDate, MIN(mydate)) AS startDate, COALESCE(@endDate, MAX(mydate)) AS endDate
FROM mytable
)
SELECT m.*
FROM limits
JOIN mytable m
ON mydate BETWEEN startDate AND endDate
Będzie to najskuteczniejsze, jeśli istnieje indeks w mydate
, ponieważ ten warunek jest sargable i użyje Index Seek
.
Jeśli nie ma indeksu, użyj IFNULL
konstrukcje proponowane przez innych.