Трудный вопрос, чтобы объяснить, поэтому, пожалуйста, потерпите меня.
У меня есть две таблицы:
1) Разбивка по Дате и указанию того, были ли они в Базовом дне в тот день (Д / Н)
ID Date Basic_Days
5423 2019-02-03 1
5423 2019-02-04 0
5423 2019-02-05 1
5423 2019-02-06 1
5423 2019-02-07 1
5423 2019-02-08 1
5423 2019-02-09 0
5423 2019-02-10 0
5423 2019-02-11 0
5423 2019-02-12 0
5423 2019-02-13 0
5423 2019-02-14 1
5423 2019-02-15 1
5423 2019-02-16 1
2) Разбивка периодов с разными датами по заказам
EPI_Start_Date EPI_End_Date ID EPI_ORDER
2019-02-03 2019-02-04 5423 1
2019-02-04 2019-02-15 5423 2
2019-02-15 2019-02-16 5423 3
То, что я пытаюсь сделать, - это присвоить отдельные дни их соответствующим EPI_ORDER, но без двойного счета дней.
Идеальный результат:
Basic_Days EPI_Start_Date EPI_End_Date ID EPIORDER
1 2019-02-03 2019-02-04 5423 1
5 2019-02-04 2019-02-15 5423 2
2 2019-02-15 2019-02-16 5423 3
Что я пробовал до сих пор:
Запрос, который я начал, почти возвращает меня туда. Но я бы хотел, чтобы правильно обрабатывать последнее свидание.
SELECT
SUM(CAST(p.Basic_Days AS int)) AS Basic_Days
, x.EPI_Start_Date
, x.EPI_End_Date
, p.ID
, x.EPIORDER
FROM *SNIP* AS x
INNER JOIN *SNIP* table leapfrog join here, unnecessary for display purposes AS cc
INNER JOIN *SNIP* AS p
ON p.ID = cc.ID
AND ( (p.[Date] BETWEEN x.EPI_Start_Date AND x.EPI_End_Date)
AND (p.[Date] <> x.EPI_End_Date) ) --this was my effort into not counting the last day on each, but it doesn't work for the very final day, where I DO want it.
WHERE p.ID = '5423' --testing
GROUP BY EPI_Start_Date
, EPI_End_Date
, x.EPIORDER
, ID
Мой фактический вывод дает мне:
Basic_Days EPI_Start_Date EPI_End_Date ID EPIORDER
1 2019-02-03 2019-02-04 5423 1
5 2019-02-04 2019-02-15 5423 2
1 2019-02-15 2019-02-16 5423 3
Вы видите, что последняя строка имеет только 1 Basic_Days. Но я бы хотел, чтобы это было 2 Basic_Days.
Я чувствую, что я не слишком далеко, но мне просто нужно настроить операторы AND в моем Join.
Любая помощь приветствуется! Надеюсь, я объяснил достаточно хорошо, чтобы понять?