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
Ini akan paling efisien jika ada indeks pada mydate
, karena kondisi ini sargable dan akan menggunakan Index Seek
.
Jika tidak ada indeks, gunakan IFNULL
konstruksi yang diusulkan oleh orang lain.