【发布时间】:2015-05-29 10:49:03
【问题描述】:
假设我有以下数据:
Create Table Pm_Test (
Ticket_id Number,
Department_From varchar2(100),
Department_To varchar2(100),
Routing_Date Date
);
Insert Into Pm_Test Values (1,'A','B',To_Date('20140101120005','yyyymmddhh24miss'));
Insert Into Pm_Test Values (1,'B','C',To_Date('20140101130004','yyyymmddhh24miss'));
Insert Into Pm_Test Values (1,'C','D',To_Date('20140101130004','yyyymmddhh24miss'));
Insert Into Pm_Test Values (1,'D','E',To_Date('20140201150004','yyyymmddhh24miss'));
Insert Into Pm_Test Values (2,'A','B',To_Date('20140102120005','yyyymmddhh24miss'));
Insert Into Pm_Test Values (3,'D','B',To_Date('20140102120005','yyyymmddhh24miss'));
Insert Into Pm_Test Values (3,'B','A',To_Date('20140102170005','yyyymmddhh24miss'));
对于以下需求,我已经添加了两个虚拟列,我认为它们可能是必要的:
Select t.*,
Count(Ticket_id) Over (Partition By Ticket_id Order By Ticket_id) Cnt_Id,
Row_Number() Over (Partition By Ticket_id Order By Ticket_id ) row_number
From Pm_Test t;
1) 我想通过添加 PROCESSING_TIME 列来衡量每张工单在部门中停留的时间(后继部门的路由日期 - 前任部门的路由日期):
2) 我想通过添加 TOTAL_PROCESSING_TIME 列来测量总处理时间:
这样做需要哪些 SQL 语句?
非常感谢您!
【问题讨论】:
-
你能澄清一下 Total_Processing_Time 吗?这是处理工单的总时间吗?
-
是的,没错
-
为了增加每个组的总处理时间,是的,SQL 是必要的。
-
@Ben:猜到了,我只是不知道那会是什么 SQL 语句。这就是我在这里发布这个问题的原因。
-
对于第一部分,您应该研究滞后/领先分析函数。对于第二个,您需要对时间求和,或者从每个组的最小日期中减去最大日期。
标签: sql oracle aggregation analytic-functions