найти максимальное количество последовательных дней отсутствия для любого человека, у которого есть указанное число дней - PullRequest
0 голосов
/ 11 марта 2020

Я работаю над отчетом об отсутствии и с трудом выясняю, как узнать количество последовательных дней, в которые сотрудник уходит, когда у него 6 или более пропусков подряд. Я могу получить максимальное число для сотрудника, но если у сотрудника есть более одного экземпляра этого события в заданных параметрах даты начала и окончания, это максимальное количество пропусков даст мне только наибольшее количество пропусков. Следующий набор данных показывает, что я имею в виду:

  ClientID  EmplID   Date    AbsentFlag   NumOfDays  RowNum
      10    2587    2019-07-14     Y       1         4
      10    2587    2019-07-15     Y       2         5
      10    2587    2019-07-16     Y       3         6
      10    2587    2019-07-19     Y       4         7
      10    2587    2019-07-20     Y       5         8
      10    2587    2019-07-21     Y       6         9
      10    2587    2019-07-22     Y       7         10
      10    2587    2019-07-23     Y       8         11
      10    2587    2019-07-26     Y       9         12
      10    2587    2019-07-27     Y       10        13
      10    2587    2019-07-28     Y       11        14
      10    2587    2019-07-29     Y       12        15
      10    2587    2019-07-30     Y       13        16
      10    2587    2019-08-03     Y       1         17
      10    2587    2019-08-04     Y       2         18
      10    2587    2019-08-05     Y       3         19
      10    2587    2019-08-06     Y       4         20
      10    2587    2019-08-09     Y       5         21
      10    2587    2019-08-10     Y       6         22
      10    2587    2019-08-11     Y       7         23
      10    2587    2019-08-12     Y       8         24
      10    2587    2019-08-13     Y       9         25

Этот сотрудник, например, имеет 13 дней отсутствия (более 6), а также 9 дней отсутствия (более 6). В моем отчете мне нужно указать первые 6 дат отсутствия, а также общее количество пропусков для каждой серии подряд. Поэтому для результатов я бы ожидал:

 ClientID   EmplID   Days    Date1         Date2        Date3         Date4          Date5        Date6
    10      2587      13   2019-07-14    2019-07-15   2019-07-16    2019-07-19   2019-07-20    2019-07-21
    10      2587       9   2019-08-03    2019-08-04   2019-08-05    2019-08-06   2019-08-09    2019-08-10

В настоящее время я получаю это:

 ClientID   EmplID   Days    Date1         Date2        Date3         Date4          Date5        Date6
    10      2587      13   2019-07-14    2019-07-15   2019-07-16    2019-07-19   2019-07-20    2019-07-21
    10      2587      13   2019-08-03    2019-08-04   2019-08-05    2019-08-06   2019-08-09    2019-08-10

Дайте мне знать, если я могу предоставить что-нибудь еще, чтобы помочь решить эту проблему. Благодаря.

1 Ответ

1 голос
/ 11 марта 2020

Вы можете определить первый день отсутствия, используя последовательность, отличную от numofdays. Затем агрегируйте и фильтруйте:

select clientid, empid, max(days),
       max(case when numofdays = 1 then date end) as day_1,
       max(case when numofdays = 2 then date end) as day_2,
       max(case when numofdays = 3 then date end) as day_3,
       max(case when numofdays = 4 then date end) as day_4,
       max(case when numofdays = 5 then date end) as day_5,
       max(case when numofdays = 6 then date end) as day_6
from (select t.*,
             row_number() over (partition by clientid, empid order by date) as seqnum
      from t
     ) t
group by clientid, empid, (seqnum - numofdays)
having max(numofdays) >= 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...