【问题标题】:Oracle SQL - Time difference within multiple recordsOracle SQL - 多条记录中的时间差
【发布时间】:2021-11-27 15:48:36
【问题描述】:

我有一个事件日志,其中包含数百万个完整的日志,我们将表称为“Event_hist”。 “Event_hist”由另一个表中的事件参数填充,称为“案例”,仅包含最后一个事件/状态。

我需要根据部门时间和特定案例类型来查找不同部门内两个日志条目之间的时间使用情况(以分钟为单位)。

Log_ID Case_ID Dep_ID Case_type Creation_TS Log_TS Log_txt
1 1001 91 1 2021-09-02 10:00 2021-09-02 10:00 Case opened
2 1002 91 1 2021-09-02 10:05 2021-09-02 10:05 Case opened
3 1003 93 2 2021-09-02 10:07 2021-09-02 10:07 Case opene
4 1001 91 1 2021-09-02 10:00 2021-09-02 10:08 Case halted
5 1001 91 1 2021-09-02 10:00 2021-09-02 10:10 Transferred to dep 93
6 1001 93 1 2021-09-02 10:00 2021-09-02 10:11 Case opened
7 1002 91 1 2021-09-02 10:05 2021-09-02 10:20 Case processed
8 1001 93 1 2021-09-02 10:00 2021-09-02 10:31 Case processed
9 1003 93 2 2021-09-02 10:07 2021-09-02 10:54 Case processed

想要的结果:

Case_ID Dep_ID Time_used
1001 91 10
1001 93 21
1002 91 15
Select
eh.case_id,
eh.dep_id,
round((eh.log_ts-eh.creation_ts)*1440,0) as time_used
From event_hist eh
Left join Cases C on eh.Case_id = c.Case_id
where eh.creation_ts > date '2021-09-01'
and eh.case_type=1
and eh.log_id=select(max(log_id) from event_hist where case_id=app.case_id)

我得到的结果是 case_id 与 Creation_TS 的最后一个日志条目之间的时间差(我认为)不稳定。 如何在此查询中考虑 Dep_ID 并获得所需的结果?

【问题讨论】:

  • 我认为您的选择中有错字,在 creation_ts 之后)它显示为 ' ,但我认为您的意思是 *

标签: sql oracle time plsql


【解决方案1】:

我认为以下查询可以回答您的问题:

SELECT case_id, dep_id, ROUND((MAX(log_ts)-MIN(log_ts))*1440, 0)
FROM event_hist eh
WHERE eh.case_type = 1
GROUP BY case_id, dep_id
ORDER BY case_id, dep_id;

这是一个显示您的测试数据的 DBFiddle (LINK)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多