我需要帮助做以下工作。我有下表的通信:
通讯ID通讯时间通讯状态6369/3/2021 8:48:49新63610/3/2021 10:47:31接受63612/3/2021 8:41:42新63612/3/2021 9:43:49接受
第二个答复表(来文):
通信ID响应时间响应状态63610/3/2021 9:30:49显示63611/3/2021 7:48:49实现63612/3/2021 10:28:49显示63617/3/2021 11:19:49实现
我需要根据通信id对通信进行分组,但我还需要知道最近的“实现时间”,即在当前通信时间之后第一次实现响应的时间。
因此,我需要这样的东西:
通信idmax(通信时间)实现响应时间63610/3/2021 10:47:3111/3/2021 7:48:4963612/3/2021 9:43:4917/3/2021 11:19:49
你能帮我个忙吗?我应该使用什么样的分析功能(或其他步骤)?沟通的状态可以改变,但我只考虑“实现”React的时间。可以有更多的实际React,但我只需要“最接近的一个”的时间沟通。每个“已实现”响应应该在结果集中有单独的“行”,它应该“划分”通信。
非常感谢你
2条答案
按热度按时间eh57zj3b1#
从oracle 12c,您可以
UNION ALL
连接两个表,然后使用MATCH_RECOGNIZE
:注意:这将不允许重叠通信。
或者,在早期版本中,您可以使用
LEAD
用一个CASE
表达式:注意:这将允许重叠通信(但两个
new
行可能会匹配相同的realized
行)。对于样本数据:
输出:
idnew\u time63021-03-09 08:48:492021-03-11 07:48:4963021-03-12 08:41:422021-03-17 11:19:49
db<>在这里摆弄
h43kikqp2#
似乎您只需要每个已实现响应的最大通信时间。单向:
另一个: