У меня есть таблица, подобная следующей.
ID StartDate EndDate AttributeA AttributeB
-- --------- ------- ---------- ----------
1 1/1/2009 2/1/2009 0 C
1 2/1/2009 3/1/2009 1 C
1 3/1/2009 4/1/2009 1 C
2 1/1/2010 2/1/2010 0 D
2 3/1/2010 4/1/2010 1 D
Диапазон дат используется для того, чтобы знать, в течение какого периода времени остальные атрибуты были действительны, у меня проблема в том, что есть несколько последовательных диапазонов времени, в которых атрибуты остаются одинаковыми, и я хотел бы получить то же самое данные, но без повторяющихся строк.
Из предыдущего примера мой ожидаемый конечный результат будет таким:
ID StartDate EndDate AttributeA AttributeB
-- --------- ------- ---------- ----------
1 1/1/2009 2/1/2009 0 C
1 2/1/2009 4/1/2009 1 C
2 1/1/2010 2/1/2010 0 D
2 3/1/2010 4/1/2010 1 D
Я слил 2-ю и 3-ю строки в одну (все атрибуты, кроме даты, были одинаковыми), но я сохранил StartDate 2-й и endDate 3-й строки.
Сначала я подумал о группировке по значениям, получая MAX и MIN следующим образом
SELECT ID, MIN(StartDate), MAX(EndDate), attributeA, attributeB
FROM MyTable
Group BY ID, AttributeA, AttributeB
Но как только я его запустил, я понял, что когда атрибуты меняются несколько раз и возвращаются к своему первоначальному значению, я получаю перекрывающиеся интервалы. Я застрял на некоторое время, пытаясь выяснить, как решить эту проблему.
Вот пример того, что я имел в виду в своем предыдущем утверждении.
Когда исходные данные выглядят следующим образом:
ID StartDate EndDate AttributeA AttributeB
-- --------- ------- ---------- ----------
1 1/1/2009 2/1/2009 0 C
1 2/1/2009 3/1/2009 0 D
1 3/1/2009 4/1/2009 0 D
1 4/1/2009 5/1/2009 1 D
1 6/1/2010 6/1/2009 0 D
Группировка результатов будет выглядеть следующим образом
ID StartDate EndDate AttributeA AttributeB
-- --------- ------- ---------- ----------
1 1/1/2009 2/1/2009 0 C
1 2/1/2009 6/1/2009 0 D
1 4/1/2009 5/1/2009 1 D
И то, что я хотел бы получить, это
ID StartDate EndDate AttributeA AttributeB
-- --------- ------- ---------- ----------
1 1/1/2009 2/1/2009 0 C
1 2/1/2009 4/1/2009 0 D
1 4/1/2009 5/1/2009 1 D
1 6/1/2010 6/1/2009 0 D
Любая помощь будет приветствоваться:)
РЕДАКТИРОВАТЬ: Я скоро буду загружать некоторые образцы данных, чтобы немного облегчить понимание моей проблемы.
EDIT2: Вот скрипт с некоторыми моими данными . Из этого примера я хотел бы получить следующие строки.
ID StartDate EndDate A B C D E F
-- --------- ------- -- -- -- -- -- --
708513 1980-01-01 2006-07-23 15 ASDB A ACT 130 0
708513 2006-07-24 2009-12-08 15 ASDB A ACT 130 2
708513 2009-12-09 2010-01-12 0 ASDB A ACT 130 2
708513 2010-01-13 2079-05-30 15 ASDB A ACT 130 2