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
Questo sarà più efficiente se c'è un indice su mydate
, poiché questa condizione è selezionabile e utilizzerà un Index Seek
.
Se non c'è un indice, usa IFNULL
costrutti proposti da altri.