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
Dit is het meest efficiënt als er een index is op mydate
, aangezien deze voorwaarde sargable is en een Index Seek
. zal gebruiken .
Als er geen index is, gebruik dan IFNULL
constructies voorgesteld door anderen.