Извините, если на этот вопрос уже был дан ответ, но я не могу его найти.Возможно из моих плохих ключевых слов.
У меня есть эта таблица:
CREATE TABLE test1
(
Employee VARCHAR(10),
Band VARCHAR(10),
StartDate DATE,
EndDate DATE
)
INSERT INTO test1
VALUES ('Emp1', 'Band1', '2009-01-01', '2010-12-31'),
('Emp1', 'Band1', '2011-01-01', '2012-12-31'),
('Emp1', 'Band1', '2013-01-01', '2013-08-31'),
('Emp1', 'Band2', '2013-09-01', '2013-12-31'),
('Emp1', 'Band2', '2014-01-01', '2014-06-30'),
('Emp1', 'Band1', '2014-07-01', '2014-12-31'),
('Emp1', 'Band1', '2015-01-01', '2018-08-31'),
('Emp2', 'Band1', '2012-01-01', '2014-12-31'),
('Emp2', 'Band1', '2015-01-01', '2018-03-31')
Результаты в этой таблице:
Employee Band StartDate EndDate
----------------------------------------
Emp1 Band1 2009-01-01 2010-12-31
Emp1 Band1 2011-01-01 2012-12-31
Emp1 Band1 2013-01-01 2013-08-31
Emp1 Band2 2013-09-01 2013-12-31
Emp1 Band2 2014-01-01 2014-06-30
Emp1 Band1 2014-07-01 2014-12-31
Emp1 Band1 2015-01-01 2018-08-31
Emp2 Band1 2012-01-01 2014-12-31
Emp2 Band1 2015-01-01 2018-03-31
Я хочу создать группу результатов таблицыкаждый employee
с band
и минимальным start date
и максимальным end date
, но когда промежуточная запись (band
) существует в середине между аналогичными band
, end date
должен быть ограничен, а start date
следующей группы в аналогичном band
должен быть сброшен снова.
Employee Band StartDate EndDate
----------------------------------------
Emp1 Band1 2009-01-01 2013-08-31
Emp1 Band2 2013-09-01 2014-06-30
Emp1 Band1 2014-07-01 2018-08-31
Emp2 Band1 2012-01-01 2018-03-31
Я пытался получить CTE, чтобы получить максимум и минимум каждой полосы и сравнить ее сОригинальная таблица, но я все равно не смог.Я также пытался использовать опережающие и запаздывающие сигналы, но все равно не получалось.
Приятно иметь
Предположим, что EndDate
второй записи 2012-02-01
,Я предпочитаю, чтобы результат был по-прежнему одной записью для первой группы Band1.
Employee Band StartDate EndDate
----------------------------------------
Emp1 Band1 2009-01-01 2013-08-31
Поскольку каждая строка результата отличается только на Band
, я смог бы выяснить, как долго сотрудник находился вопределенная группа, прежде чем перейти в другую (другую группу).
Но это что-то хорошее, что есть.