Это то, в чем я пытаюсь разобраться, и любое направление будет оценено.
Сотрудник 6 взял выходной в пятницу 16.08.2019, но позвонил в больницу Четверг, 15 августа 2019 г.
Сотрудник 10 взял отпуск с понедельника по четверг 12 августа 2019 года, 15 августа 2019 года, затем позвонил в больницу 16 августа 2019 года
Сотрудник 14 взял отпуск с понедельника по пятницу, 05.08.2019, 09.08.2019, а затем позвонил в больницу в следующий понедельник, 12.08.2019.
Сотрудник 23 позвонил по болезни в пятницу 02.08.2019 перед началом отпуска 08.05.2019 - 08.09.2019.
У меня есть код, который ищет шаблон, в этом случае я ищу 3 дня болезни подряд, чтобы убедиться, что это не случай FMLA, но я не могу разобрать logi c, чтобы проверить SK накануне или после рабочего дня.
DECLARE @var_StartDate DATETIME = '10/28/2018' -- Set the start date
DECLARE @var_EndDate DATETIME = '10/26/2019'; --Set the end date
--:OUT"C:\Data\3_consecutive_Sick_Days.csv"
SELECT
EMPLOYEEID
,CONVERT(VARCHAR(10),MIN(ABSENCEDATE),101) AS Absence_Start
,LEFT(DATENAME(DW,MIN(ABSENCEDATE)),3) AS Start_DOW
,CONVERT(VARCHAR(10),MAX(ABSENCEDATE),101) AS Absence_End
,LEFT(DATENAME(DW,MAX(ABSENCEDATE)),3) AS End_DOW
,COUNT(EMPLOYEEID) AS Count
,PAYCODENAME
FROM (SELECT A.EMPLOYEEID, A.ABSENCEDATE,A.PAYCODENAME,SUM(COL) OVER(PARTITION BY EMPLOYEEID, PAYCODENAME ORDER BY ABSENCEDATE) AS GRP
FROM (SELECT A.*,
CASE WHEN DATEDIFF(DAY,LAG(ABSENCEDATE) OVER(PARTITION BY EMPLOYEEID, PAYCODENAME ORDER BY ABSENCEDATE),ABSENCEDATE)=1
--OR (DATEPART(WEEKDAY,[ABSENCEDATE])=2 AND DATEPART(WEEKDAY,LAG([ABSENCEDATE]) OVER(PARTITION BY EMPLOYEEID,PAYCODENAME ORDER BY ABSENCEDATE))=6)
THEN 0 ELSE 1 END AS COL
FROM VP_ABSENCE A
WHERE ABSENCEDATE BETWEEN @var_StartDate AND @var_EndDate
AND PAYCODENAME IN ('SK')
AND A.TIMEINSECONDS > 0
) A ) A
GROUP BY EMPLOYEEID, PAYCODENAME, GRP
HAVING DATEDIFF(DAY,MIN(ABSENCEDATE), MAX(ABSENCEDATE)) >2
ORDER BY EMPLOYEEID, CONVERT(VARCHAR(10),MIN(ABSENCEDATE),101)
Я бы хотел, чтобы выходной результат был:
6, SK, 08/15/2019, PT, 08/16/2019, NULL
10, SK, 08/16/2019, PT, 08/12/2019, 08/15/2019
14, SK, 08/12/2019, PT, 08/05/2019, 08/09/2019
23, SK, 08/02/2019, PT, 08/05/2019, 08/09/2019
Данные, указанные ниже ....
Emp Date DOW Code Hours Wages
6 08/15/2019 Thu SK 8.000000 0.000000
6 08/16/2019 Fri PT 8.000000 0.000000
10 08/12/2019 Mon PT 8.000000 0.000000
10 08/13/2019 Tue PT 8.000000 0.000000
10 08/14/2019 Wed PT 8.000000 0.000000
10 08/15/2019 Thu PT 8.000000 0.000000
10 08/16/2019 Fri SK 8.000000 0.000000
13 08/08/2019 Thu PT 1.000000 0.000000
13 08/09/2019 Fri PT 2.000000 0.000000
14 08/05/2019 Mon PT 8.000000 0.000000
14 08/06/2019 Tue PT 8.000000 0.000000
14 08/07/2019 Wed PT 8.000000 0.000000
14 08/08/2019 Thu PT 8.000000 0.000000
14 08/09/2019 Fri PT 8.000000 0.000000
14 08/12/2019 Mon SK 8.000000 0.000000
16 08/12/2019 Mon PT 8.000000 0.000000
16 09/06/2019 Fri PT 3.000000 0.000000
16 09/13/2019 Fri PT 2.000000 0.000000
21 08/05/2019 Mon PT 8.000000 0.000000
21 08/09/2019 Fri PT 8.000000 0.000000
21 08/16/2019 Fri PT 8.000000 0.000000
21 09/03/2019 Tue PT 8.000000 0.000000
21 09/04/2019 Wed PT 8.000000 0.000000
21 09/05/2019 Thu PT 8.000000 0.000000
23 08/02/2019 Fri SK 8.000000 0.000000
23 08/05/2019 Mon PT 8.000000 0.000000
23 08/06/2019 Tue PT 8.000000 0.000000
23 08/07/2019 Wed PT 8.000000 0.000000
23 08/08/2019 Thu PT 8.000000 0.000000
23 08/09/2019 Fri PT 8.000000 0.000000