До CTE можно было использовать стандартную предварительно загруженную таблицу целых чисел (обычно несколько тысяч в таблице утилит, см. эту статью ) и присоединяться к ней по мере необходимости. Это будет работать для вас в MySQL:
CREATE TABLE dbo.Numbers
(
Number INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
)
WHILE COALESCE(SCOPE_IDENTITY(), 0) <= 1024
BEGIN
INSERT dbo.Numbers DEFAULT VALUES
END
SELECT DATEADD(dd, Number, DATEADD(dd, 0, DATEDIFF(dd, 0, DATEADD(yy, -1, GETDATE())))) AS Date
FROM Numbers
WHERE Number BETWEEN 0 AND 366
В SQL Server 2005 вы можете использовать общие табличные выражения и рекурсию:
WITH DateRange(Date) AS
(
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, DATEADD(yy, -1, GETDATE()))) AS Date
UNION ALL
SELECT DATEADD(day, 1, Date) AS Date
FROM DateRange
WHERE Date <= GETDATE()
)
SELECT Date
FROM DateRange
OPTION (MAXRECURSION 366)