Генерация гистограмм Leave Pattern в SQL - PullRequest
0 голосов
/ 23 мая 2018
 In the Data shown,we need to do a continuous pattern check of Leaves, 

например:

CASE
WHEN count("Leaves") BETWEEN 1 AND 2 THEN '1-2'
WHEN count("Leaves") BETWEEN 3 AND 5 THEN '3-5'
WHEN count("Leaves") >5 THEN '>5'
ELSE 'Above 5' END AS "Leave Occurence",

1 и 2 января сотрудник взял 2 листа вместе, которые принадлежат «1-2», так же как и 8,9,10,11 января.в течение 4 дней, следовательно, в '3-4'Becket и более 5 листьев принадлежит [<5] Bucket </p>

. Теперь нам нужно рассчитать количество каждого Bucket за месяц.Здесь 1-2Bucket равен 2 3-4Bucket равен 1 <5 Bucket также равен 1 </p>

Мы использовали этот код, но он выдает СУММУ, но не проверяет контурную схему

Year Month Leaves
2011 1-Jan 1
     2-Jan 1
     3-Jan 0
     4-Jan 0
     5-Jan 0
     6-Jan 0
     7-Jan 0
     8-Jan 1
     9-Jan 1
    10-Jan 1
    11-Jan 1
    12-Jan 0
    13-Jan 0
    14-Jan 0
    15-Jan 1
    16-Jan 1
    17-Jan 1
    18-Jan 1
    19-Jan 1
    20-Jan 1
    21-Jan 0
    22-Jan 0
    23-Jan 1
    24-Jan 1

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете определить каждую группу листьев, посчитав количество не-листьев перед ней.Тогда у вас есть агрегация:

select min(date), max(date), count(*) as numdays
from (select t.*,
             (select count(*)
              from t t2
              where t2.date <= t.date and t2.leave = 0
             ) as grp
      from t
      where t.leave = 1
     ) t
group by grp;

Затем вы можете отформатировать результаты так, как вам нравится.Это дает вам одну строку за непрерывный период «отпуска».

...