我有兩個表都有列StartDate和EndDate。尋找補充日期範圍?
我想返回一個結果集,它包含一個表(TableA)中的所有日期範圍,以及另一個表(TableB)的所有補充日期範圍。
CREATE TABLE [dbo].[TableA](
[ID] [int] NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NOT NULL
)
CREATE TABLE [dbo].[TableB](
[ID] [int] NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NOT NULL
)
INSERT INTO TableA (ID, StartDate, EndDate) VALUES(1, '4/1/2009', '8/1/2009')
INSERT INTO TableA (ID, StartDate, EndDate) VALUES(1, '10/1/2009', '12/1/2009')
INSERT INTO TableB (ID, StartDate, EndDate) VALUES(1, '1/1/2009', '2/1/2010')
INSERT INTO TableA (ID, StartDate, EndDate) VALUES(2, '4/1/2009', '8/1/2009')
INSERT INTO TableB (ID, StartDate, EndDate) VALUES(2, '1/1/2009', '5/1/2009')
INSERT INTO TableB (ID, StartDate, EndDate) VALUES(2, '7/1/2009', '12/1/2009')
從三個數據集的預期結果集應該是:
(ID = 1)
1/1/2009 - 4/1/2009 (from TableB)
4/1/2009 - 8/1/2009 (from TableA)
8/1/2009 - 10/1/2009 (from TableB)
10/1/2009 - 12/1/2009 (from TableA)
12/1/2009 - 2/1/2010 (from TableB)
(ID = 2)
1/1/2009 - 4/1/2009 (from TableB)
4/1/2009 - 8/1/2009 (from TableA)
8/1/2009 - 12/1/2009 (from TableB)
日期範圍不能保證是連續的,我不能讓他們是如何表之間重疊的任何假設......在每個表格中,他們可以被假定爲不重疊。
我在圍繞如何將TableB中的單個日期範圍拆分爲多個部分來查找SQL中的所有補充「區域」時遇到了問題。
任何人有任何建議嗎?
在此上下文中定義「補充」。 – 2009-12-28 21:04:07
你有幾行?性能是一個問題嗎? – 2009-12-28 21:10:53
我認爲他意味着他想要A中的所有行,加上B中所有與A中的任何時段都不重疊的時段的部分。換句話說:「一個聯合(B減去(B相交A))',因此A和B'是不相交的並且'A聯合B'==聯合B'。 – 2009-12-28 21:53:44