Skapa en tidsserie för ett år
Målet med den här övningen är att skapa en serie dagar för ett helt år. För denna uppgift behöver du använda följande två tids- och datumfunktioner:
GETDATE()DATEADD(datepart, number, date)
Med GETDATE() hämtar du aktuell tid (t.ex. 2019-03-14 20:09:14) och med DATEADD(month, 1, GETDATE()) får du aktuellt datum plus en månad (t.ex. 2019-04-14 20:09:14).
För att få en serie dagar för ett år behöver du 365 rekursionssteg.
Öka därför antalet iterationer med OPTION (MAXRECURSION n) där n anger antalet iterationer.
Den här övningen är en del av kursen
Hierarkiska och rekursiva frågor i SQL Server
Övningsinstruktioner
- Initiera aktuell tid som
time. - Välj CTE:n rekursivt och kombinera ankare- och rekursiv medlem med rätt sats.
- Begränsa antalet iterationer till antalet dagar i ett år minus 1.
- Öka det maximala antalet iterationer till antalet dagar i ett år med
OPTION (MAXRECURSION n).
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
WITH time_series AS (
SELECT
-- Get the current time
___ AS time
UNION ALL
SELECT
DATEADD(day, 1, time)
-- Call the CTE recursively
FROM ___
-- Limit the time series to 1 year minus 1 (365 days -1)
WHERE time < GETDATE() + ___)
SELECT time
FROM time_series
-- Increase the number of iterations (365 days)
OPTION(MAXRECURSION ___)