У меня есть две таблицы, каждая из которых имеет столбцы StartDate и EndDate.Поиск диапазонов дат добавления?
Я пытаюсь вернуть единый набор результатов, содержащий все диапазоны дат из одной таблицы (таблица A), и все диапазоны дат дополнений от другого (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')
Ожидаемый ResultSet из трех наборов данных должен быть:
(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.
У кого-нибудь есть предложения?
Определите 'дополнение' в этом контексте. –
Сколько у вас строк? Является ли производительность проблемой? –
Я думаю, что он означает, что он хочет, чтобы все строки из A, плюс все части периодов в B, которые не пересекаются с каким-либо периодом в A. Другими словами: «Объединение (B минус (B пересекает A))», так что A и B 'не пересекаются и 'A union B' == A union B'. –