Заранее спасибо за терпение и помощь!
Я пытаюсь разделить мои данные таким образом, чтобы отображались диапазоны дат.
ИЗОБРАЖЕНИЕ: Набор данных - Текущие результаты - Желаемые результаты
Визображение вы можете увидеть, как выглядит мой набор данных.Результаты, которые я сейчас получаю.А также, результаты, которые я хотел бы получить.
Вот код, который я получил, который дает мне мои текущие результаты.Я с трудом разбираюсь в PARTITION.
Редактировать Я могу вернуть субботу и воскресенье обратно, если для данных необходимо иметь все 365 последовательных дней.Я просто удаляю его из источника данных в предложении WHERE.
--DELETE TEMP TABLE USED TO STORE CONSECUTIVE ABSENCES
DROP TABLE IF EXISTS #StuConsecAtt;
--CREATE TEMP TABLE THAT STORES CONSECUTIVE ABSENCE DATE RANGES
CREATE TABLE #StuConsecAtt(
SIS_NUMBER INT,
ABS_FROM DATE,
ABS_TO DATE
);
--INSERT CONSECUTIVE ABSENCE DATA NEW TABLE
WITH stuAtt
AS (
SELECT *
,DATEADD(DAY, - ROW_NUMBER() OVER (
PARTITION BY SIS_NUMBER ORDER BY ABS_DATE
), ABS_DATE) AS grp
FROM #stuCalAtt
)
INSERT INTO #StuConsecAtt
(ABS_FROM, ABS_TO, SIS_NUMBER)
SELECT min(ABS_DATE) AS [From]
,max(ABS_DATE) AS [To]
-- ,[ABS_REASON]
,SIS_NUMBER
FROM stuATT
GROUP BY SIS_NUMBER
,grp
ORDER BY [From];
SELECT * FROM #StuConsecAtt
WHERE ABS_TO > ABS_FROM;
РЕДАКТИРОВАТЬ НИЖЕ
ДАННЫЕ Глядя наданные, которые я пытаюсь поместить дни подряд с ABSENT_DATE = Y в одну группу.Ниже 10/4 - 10/11 являются последовательными (но выходные дни будут ABSENT_DAY = N), поэтому я удалил выходные.Нет, потому что с 10/4 по 10/11 сгруппированы (последовательно в наборе данных), все с ABSENT_DAY = Y, я бы хотел сгруппировать их, чтобы получить диапазон результатов 10 / 4-10 / 11.Также как следующий диапазон будет 10/18 - 10/19.Там, где разрыв в выходные дни, является причиной проблемы.
SIS_NUMBER CALENDAR_DATE WEEK_DAY ABS_DATE SCHOOL_DAY ABSENT_DAY
641861 2017-10-03 Tuesday NULL Y N
641861 2017-10-04 Wednesday 2017-10-04 Y Y
641861 2017-10-05 Thursday 2017-10-05 Y Y
641861 2017-10-06 Friday 2017-10-06 Y Y
641861 2017-10-09 Monday 2017-10-09 Y Y
641861 2017-10-10 Tuesday 2017-10-10 Y Y
641861 2017-10-11 Wednesday 2017-10-11 Y Y
641861 2017-10-12 Thursday NULL N N
641861 2017-10-13 Friday NULL N N
641861 2017-10-16 Monday NULL Y N
641861 2017-10-17 Tuesday NULL Y N
641861 2017-10-18 Wednesday 2017-10-18 Y Y
641861 2017-10-19 Thursday 2017-10-19 Y Y
ТЕКУЩИЕ РЕЗУЛЬТАТЫ
SIS_NUMBER FROM_DATE TO_DATE
641861 2017-10-04 2017-10-06
641861 2017-10-09 2017-10-11
641861 2017-10-18 2017-10-19
Желаемые результаты
SIS_NUMBER FROM_DATE TO_DATE
641861 2017-10-04 2017-10-11
641861 2017-10-18 2017-10-19