By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
SET DATEFORMAT YDM;
CREATE TABLE Issues
(IssueID int,IssueName varchar(10),created datetime, closed datetime);
INSERT INTO Issues
VALUES
(1,'a','2012-01-01 00:00:00', '2012-05-01 00:00:00'),
(2,'b','2012-03-01 00:00:00', '2012-06-01 00:00:00');
2 rows affected
WITH CTE_DatesTable
AS
(
SELECT CAST('20120101' as datetime) AS [date]
UNION ALL
SELECT DATEADD(dd, 1, [date])
FROM CTE_DatesTable
WHERE DATEADD(dd, 1, [date]) <= '20120106'
)
SELECT [date] , i.IssueId, DATEDIFF(DAY,i.created,d.[date]) AS Days_Open
FROM CTE_DatesTable d
CROSS JOIN Issues i
WHERE d.date BETWEEN i.created AND i.closed
ORDER BY [date], IssueId
OPTION (MAXRECURSION 0);
date | IssueId | Days_Open |
---|---|---|
01/01/2012 00:00:00 | 1 | 0 |
02/01/2012 00:00:00 | 1 | 1 |
03/01/2012 00:00:00 | 1 | 2 |
03/01/2012 00:00:00 | 2 | 0 |
04/01/2012 00:00:00 | 1 | 3 |
04/01/2012 00:00:00 | 2 | 1 |
05/01/2012 00:00:00 | 1 | 4 |
05/01/2012 00:00:00 | 2 | 2 |
06/01/2012 00:00:00 | 2 | 3 |