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

У меня есть две таблицы, такие как:

Таблица 1: CheckInOut

CID | EmpId | PunchTime | CodeInOut
=================================
10 | 101 | 11:30:45 | Green
11 | 102 | 11:30:55 | Brown
12 | 103 | 11:31:20 | Green
13 | 101 | 11:31:44 | Red
14 | 103 | 11:32:05 | Orange
15 | 104 | 11:35:00 | Yellow
16 | 103 | 11:36:02 | Green
17 | 101 | 11:36:20 | Orange
18 | 104 | 11:37:00 | Red
19 | 103 | 11:37:01 | Red
20 | 103 | 11:40:01 | Black

Таблица 2: Emp

EmpId | FName | LName | ContactNo
101 | Jack | Read | 456789
102 | Mike | jobs | 556789
103 | Stev | more | 656789
104 | Andy | Jara | 756789

Я хочу узнать только список сотрудники, которые зарегистрировались в течение минуты.

Результат должен выглядеть примерно так:

EmpId | FName | LName | CID | CodeInOut | ContactNo
101 | Jack | Read | 10,13 | Green,Red | 456789
103 | Stev | more | 12,14,16,19 | Green,Orange,Green,Red |656789

Помощь будет очень признательна.

1 Ответ

0 голосов
/ 30 апреля 2020

Вам нужны функции агрегирования строк и даты / времени, чтобы решить эту проблему. Итак, позвольте мне предположить, что ваша база данных Oracle (ее синтаксис в этом отношении ближе к стандартному).

Вы хотите объединить строки в checkinout, но только когда они достаточно близки к соседним строк. Используйте lag() и lead(), а затем фильтруйте:

select empid,
       listagg(cid, ',') within group (order by cid) as cids,
       listagg(CodeInOut, ',') within group (order by cid) as CodeInOuts
from (select cio.*,
             lag(punchtime) over by (partition by empid order by punchtime) as prev_pt,
             lead(punchtime) over by (partition by empid order by punchtime) as next_pt
      from checkinout cio
     ) cio
where prev_pt > punchtime - interval '1' minute or
      next_pt < punchtime + interval '1' minute
group by empid;

Вы можете ввести оставшиеся столбцы с emp и включить дополнительные столбцы в select и group by.

Здесь - это дБ <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...