Oracle SQL - Запрос между двумя временными метками, которые охватывают несколько дней, но только для определенных часов в течение дня - PullRequest
0 голосов
/ 22 февраля 2019

По сути, попытка создать запрос на выборку с условием на промежуток времени, который должен занимать х количество дней, но только между определенными часами в течение каждого дня (скажем, с 1 до 3 часов ночи).

Вот чтоЯ сделал, но есть ли более рекурсивный способ сделать это?

Заранее спасибо, ребята!

SELECT e.EMPLOYEENUMBER, ea.EMPID, COUNT(1)
FROM EMPLOYEEACTIVITY ea, EMPLOYEE e
WHERE ea.EMPID = e.ID
      AND (ea.ENTRYTIME BETWEEN '2019-02-08 01:00:00' and '2019-02-08 03:00:00' 
           OR ea.ENTRYTIME between '2019-02-07 01:00:00' and '2019-02-07 03:00:00'
           OR ea.ENTRYTIME between '2019-02-06 01:00:00' and '2019-02-06 03:00:00'
           OR ea.ENTRYTIME between '2019-02-05 01:00:00' and '2019-02-05 03:00:00'
           OR ea.ENTRYTIME between '2019-02-04 01:00:00' and '2019-02-04 03:00:00'
           OR ea.ENTRYTIME between '2019-02-03 01:00:00' and '2019-02-03 03:00:00'
           OR ea.ENTRYTIME between '2019-02-02 01:00:00' and '2019-02-02 03:00:00'
           OR ea.ENTRYTIME between '2019-02-01 01:00:00' and '2019-02-01 03:00:00')
      AND ea.status = 'CON'
GROUP BY e.EMPLOYEENUMBER, ea.EMPID
ORDER BY COUNT(1) DESC;

1 Ответ

0 голосов
/ 22 февраля 2019

Вместо этого вы можете сделать:

SELECT e.EMPLOYEENUMBER, ea.EMPID, COUNT(1)
FROM EMPLOYEEACTIVITY ea, EMPLOYEE e
WHERE ea.EMPID = e.ID
    AND EXTRACT(HOUR FROM ea.ENTRYTIME) BETWEEN 1 and 3
    AND ea.ENTRYTIME BETWEEN '2019-02-01' AND '2019-02-08'
    AND ea.status = 'CON'
GROUP BY e.EMPLOYEENUMBER, ea.EMPID
ORDER BY COUNT(1) DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...