Время и посещаемость - PullRequest
       29

Время и посещаемость

0 голосов
/ 24 ноября 2018

У меня есть таблица с данными ниже

EMPID   |  DEVICE     |    EVENTTIME
-----------------------------------------
112     |  READ_IN    |    2018-11-02 07:00:00.000
112     |  READ_IN    |    2018-11-02 08:00:00.000
112     |  READ_OUT   |    2018-11-02 12:00:00.000
112     |  READ_IN    |    2018-11-02 13:00:00.000
112     |  READ_OUT   |    2018-11-02 16:00:00.000

Мне нужен запрос на выборку для получения данных ниже:

ID_Emp  |Date          |TimeIn |TimeOut|Hours

112     |02/11/2018    |8:00   |16:00  |7:00

В моей таблице сотрудникпришел в 7:00, но он не сделал свою работу, а через час вернулся и работал.Он взял свой обеденный перерыв в 12: 00-13: 00 и оставил свою работу в 16:00.Таким образом, его общее рабочее время составит 7 часов.

1 Ответ

0 голосов
/ 24 ноября 2018

Сначала вам нужно исключить время между 12 и 1, я написал простую фразу where для этого.После этого я использовал PIVOT для транспонирования строк в столбцы с помощью max EVENTTIME.И, наконец, я написал внешний запрос SELECT для преобразования столбцов в ваш предполагаемый формат.

вот ссылка на фидлер: http://sqlfiddle.com/#!4/f1189/10

вот код:

SELECT 
  EMPID, 
  TO_CHAR(READ_IN, 'HH24:MI') READ_IN, 
  TO_CHAR(READ_OUT, 'HH24:MI') READ_OUT, 
  EXTRACT(HOUR FROM READ_OUT - READ_IN) HOUR
FROM (
  select * from (
    select  * from Table1
    WHERE 
      extract(hour from eventtime) not between '12' and '13'
  )
  PIVOT (
    MAX(EVENTTIME) 
    for DEVICE in ( 'READ_IN' READ_IN, 'READ_OUT' READ_OUT )
  )
)

обратите внимание, что этот пример работает только для оракула. ​​

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