用于检索时间戳值之间的时间间隔的SQL查询

用于检索时间戳值之间的时间间隔的SQL查询,sql,oracle,timestamp,date-difference,Sql,Oracle,Timestamp,Date Difference,我在oracle中有两个表,我需要为以下问题编写一个SQL查询 注:客户工作时间为上午9点至下午6点 表1包含创建和解决的问题时间戳 在表1中,2017年12月24日下午6:00办公室关闭时提出了一个问题,并于2017年12月26日上午10:00办公室开放后一小时解决 我想计算问题产生和解决之间的时间,在这种情况下,这两个时间之间的时间是一个小时,因为2017年12月25日是假日 假日列表可在假日表中找到 条件1:如果两个日期之间存在假日日期,则应忽略这些日期 条件2:如果周末周六和周日在创建和

我在oracle中有两个表,我需要为以下问题编写一个SQL查询

注:客户工作时间为上午9点至下午6点

表1包含创建和解决的问题时间戳

在表1中,2017年12月24日下午6:00办公室关闭时提出了一个问题,并于2017年12月26日上午10:00办公室开放后一小时解决

我想计算问题产生和解决之间的时间,在这种情况下,这两个时间之间的时间是一个小时,因为2017年12月25日是假日

假日列表可在假日表中找到

条件1:如果两个日期之间存在假日日期,则应忽略这些日期

条件2:如果周末周六和周日在创建和解决的这两个日期之间,则应忽略它

有人能帮我吗

表1和表2:


您可以使用相关子查询来查找假日表中必须包含的周末数,并使用时间戳操作来获得结果。这适用于PostgreSQL,但应易于适应Oracle:

SELECT issue_created_date, issue_resolved_date, ((days_in_bet - downtime_days) * INTERVAL '24 HOUR') + hours AS total_hours
FROM
(
SELECT issue_created_date, eod_timestamp, issue_resolved_date, sod_timestamp, downtime_days, 
       CASE WHEN DATE_TRUNC('DAY', issue_created_date) <> DATE_TRUNC('DAY', issue_resolved_date) THEN DATE(sod_timestamp) - DATE(eod_timestamp) - 1 ELSE 0 END AS days_in_bet,
       CASE WHEN DATE_TRUNC('DAY', issue_created_date) = DATE_TRUNC('DAY', issue_resolved_date) THEN issue_resolved_date - issue_created_date
        ELSE (eod_timestamp - issue_created_date) + (issue_resolved_date - sod_timestamp) END AS hours
FROM
(
    SELECT issue_created_date, DATE_TRUNC('DAY',issue_created_date) + INTERVAL '18 HOUR' AS eod_timestamp,
                                                                                    issue_resolved_date, DATE_TRUNC('DAY',issue_resolved_date) + INTERVAL '9 HOUR' AS sod_timestamp,
                                                                                    (SELECT COUNT(1) FROM tab2 h WHERE h.holiday BETWEEN i.issue_created_date AND i.issue_resolved_date) AS downtime_days
    FROM tab1 i 
) a1
) a2

问题创建日期和问题解决日期是否保证始终在工作日和工作时间内?如果是这样,那么问题就比最一般的情况稍微容易一些。选择问题创建日期、日期、问题创建日期+间隔时间“18小时”作为eod时间戳,问题解决日期、日期、问题解决日期+间隔时间“9小时”作为eod时间戳,从表2 h中选择COUNT1,其中h.holiday介于i.issue\u创建日期和i.issue\u解决日期之间,作为表1 i中的停工天数-您可以分享此查询的示例输出吗
issue_created_date    |  issue_resolved_date  | response_time_hours
"2017-12-24 18:00:00"   "2017-12-26 10:00:00"   "01:00:00"
"2017-12-26 13:00:00"   "2017-12-26 18:00:00"   "05:00:00"
"2017-12-27 08:00:00"   "2017-12-27 10:00:00"   "02:00:00"
"2017-12-27 14:00:00"   "2017-12-28 09:30:00"   "04:30:00"