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
Ce sera plus efficace s'il y a un index sur mydate
, puisque cette condition est sargable et utilisera un Index Seek
.
S'il n'y a pas d'index, utilisez IFNULL
constructions proposées par d'autres.