0
CREATE TABLE dbo.Projects
( projectid INT NOT NULL,
title VARCHAR(100) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL);
GoINSERT INTO dbo.Projects(projectid, title, start_date, end_date) VALUES
(1, 'Project 1', '20100212', '20100220'),
(2, 'Project 2', '20100214', '20100312'),
(3, 'Project 3', '20100124', '20100201'),
(4, 'Project 4', '20100401', '20100410'),
(5, 'Project 5', '20100420', '20100425'),
(6, 'Project 6', '20100501', '20100509'),
(7, 'Project 7', '20100409', '20100415'),
(8, 'Project 8', '20100414', '20100421'),
(9, 'Project 9', '20100605', '20100610'),
(10, 'Project 10', '20100614', '20100621'),
(11, 'Project 11', '20100601', '20100625');
Go
והשליפה הרקורסיבית:
With T1 As
(Select Row_Number() Over(Order By Start_date) N,
*
From Projects),T2 As(Select 1 N,start_date,
end_date
From T1Where N=1Union All
Select T2.N+1,T2.start_date,
Case When T1.end_date>=T2.end_date Then T1.end_date Else T2.end_date End
From T1Inner Join T2
On T2.End_date >= T1.start_dateWhere T1.N=T2.N+1Union All
Select T2.N+1,T1.start_date,
T1.end_date
From T1Inner Join T2
On T2.End_date < T1.start_dateWhere T1.N=T2.N+1)
Select start_date, Max(end_date) end_dateFrom T2Group By start_date;
הפלט המתקבל:
start_date end_date2010-01-24 2010-02-01
2010-02-12 2010-03-12
2010-04-01 2010-04-25
2010-05-01 2010-05-09
2010-06-01 2010-06-25











0Awesome Comments!