Данные раздела SQL по диапазону дат, игнорируя промежутки и выходные дни - PullRequest
0 голосов
/ 10 мая 2018

Заранее спасибо за терпение и помощь!

Я пытаюсь разделить мои данные таким образом, чтобы отображались диапазоны дат.

ИЗОБРАЖЕНИЕ: Набор данных - Текущие результаты - Желаемые результаты

Визображение вы можете увидеть, как выглядит мой набор данных.Результаты, которые я сейчас получаю.А также, результаты, которые я хотел бы получить.

Вот код, который я получил, который дает мне мои текущие результаты.Я с трудом разбираюсь в 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
...