Web Listing 3: Script to Create the fn_HistSteps Function IF OBJECT_ID('dbo.fn_HistSteps') IS NOT NULL DROP FUNCTION dbo.fn_HistSteps; GO CREATE FUNCTION dbo.fn_HistSteps ( @from_dt AS DATETIME, @to_dt AS DATETIME ) RETURNS TABLE AS RETURN WITH C0 AS ( SELECT DATEADD(day, DATEDIFF(day, 0, @from_dt), 0) AS floor_from_dt, DATEDIFF(day, @from_dt, @to_dt) + 1 AS diff ), C1 AS ( SELECT n, DATEADD(day, n-1, floor_from_dt) AS from_dt, DATEADD(day, n, floor_from_dt) AS to_dt FROM dbo.Nums JOIN C0 ON n <= diff ), C2 AS ( SELECT n, CASE WHEN @from_dt > from_dt THEN @from_dt ELSE from_dt END AS from_dt, CASE WHEN @to_dt < to_dt THEN @to_dt ELSE to_dt END AS to_dt FROM C1 ) SELECT n, from_dt, to_dt FROM C2 WHERE to_dt > from_dt; GO