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
Detta kommer att vara mest effektivt om det finns ett index på mydate
, eftersom detta villkor är sargbart och kommer att använda en Index Seek
.
Om det inte finns något index, använd IFNULL
konstruktioner föreslagna av andra.