Oracle SQL - 在两个时间戳之间进行查询,这两个时间戳跨越多天但仅在一天中的某些小时

问题描述 投票:0回答:1

基本上尝试创建一个选择查询,其条件的时间跨度需要跨越x天,但仅在每天的某些小时之间(假设是1m到3am)。

这是我所做的,但有一个更清晰的递归方式吗?

提前谢谢你们!

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;
sql oracle
1个回答
3
投票

相反,你可以这样做:

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;
© www.soinside.com 2019 - 2024. All rights reserved.