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
Isso será mais eficiente se houver um índice em
mydate
, já que esta condição é sargável e usará um Index Seek
. Se não houver índice, use
IFNULL
construções propostas por outros.