как найти активность простую человека с помощью sql - PullRequest
0 голосов
/ 28 октября 2019

worker таблица отслеживания всей работы, выполняемой работником в данный день. Как выполнить запрос к этой таблице, чтобы узнать время, когда у него не было работы, а также время и метки времени, когда он был свободен.

Таким образом, в таблице может быть запись, когда он поднимает свою первую работу, а затем онвыбирает другой, а затем бросает их обоих. Через некоторое время он подбирает еще несколько, которые снова заносятся в таблицу.

Итак, со всем этим, как вы находите данные, когда у него нет никакой работы

Таблица: worker

  worker_id | task_id |      start_ts       |       end_ts        
 -----------|---------|---------------------|--------------------- 
          1 |       1 | 2019-27-10 03:14:07 | 2019-27-10 03:20:07 
          1 |       2 | 2019-27-10 03:19:07 | 2019-27-10 03:25:07 
          1 |       3 | 2019-27-10 03:18:07 | 2019-27-10 05:20:07 
          2 |       1 | 2019-27-10 06:14:07 | 2019-27-10 06:20:07 
          3 |       2 | 2019-27-10 06:19:07 | 2019-27-10 06:25:07 
          4 |       3 | 2019-27-10 06:18:07 | 2019-27-10 07:20:07 

1 Ответ

0 голосов
/ 28 октября 2019

Вы можете разделить данные на отдельные временные метки. Затем присвойте +1 время начала и -1 время окончания (плюс одна секунда). Совокупная сумма этого значения говорит вам, сколько задач у кого-то было запущено в то время.

Итак, последний шаг - фильтрация, где значение равно 0:

with t as (
      select worker_id, start_ts as ts, 1 as inc
      from work
      union all
      select worker_id, end_ts + interval '1 second' as ts, -1 as inc
      from work
     ),
     t2 as (
      select t.worker, t.ts,
             sum(sum(t.inc)) over (partition by t.worker_id) as num_tasks,
             lead(t.ts) over (partition by t.worker, t.ts) as next_ts
      from t
      group by t.worker, t.ts
     )
select t2.*
from t2
where num_tasks = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...