现在有这么一张表 Table1 (工作人员状态变动流水表)
字段 为 D_Date (状态发生时间 YYYY-MM-DD HH24:MIMIS), C_USER(人员 VARCHAR2), C_STATUS(状态 char(1) ), C_SUBSTATUS(前一个状态 char(1))
例如:
2009-01-01 07:30:00 路人甲 1 0
2009-01-01 07:30:10 路人乙 2 1
2009-01-01 07:30:20 路人甲 2 1
2009-01-01 07:30:30 路人甲 1 2 --路人甲 发生c_status = 1 的时长为: 00:00:10
2009-01-01 07:30:40 路人乙 1 2 --路人乙 发生c_status = 1 的时长为: 00:00:30
2009-01-01 07:30:50 路人乙 0 1
2009-01-01 07:31:00 路人甲 2 1
2009-01-01 07:31:10 路人乙 1 0 --路人乙 发生c_status = 1 的时长为: 00:00:20
2009-01-01 07:31:50 路人甲 1 2 --路人甲 发生c_status = 1 的时长为: 00:00:50
其中 D_Date记录的是C_STATUS开始的时间
现在要统计: 各个人员,C_STATUS = '1' 的最长持续时间 按天统计,例如:
日期 人员 最长持续时间
2009-01-01 路人甲 00:00:50
2009-01-01 路人乙 00:00:30
请问如何做到高效的统计出所需要的数据 ,谢谢.
字段 为 D_Date (状态发生时间 YYYY-MM-DD HH24:MIMIS), C_USER(人员 VARCHAR2), C_STATUS(状态 char(1) ), C_SUBSTATUS(前一个状态 char(1))
例如:
2009-01-01 07:30:00 路人甲 1 0
2009-01-01 07:30:10 路人乙 2 1
2009-01-01 07:30:20 路人甲 2 1
2009-01-01 07:30:30 路人甲 1 2 --路人甲 发生c_status = 1 的时长为: 00:00:10
2009-01-01 07:30:40 路人乙 1 2 --路人乙 发生c_status = 1 的时长为: 00:00:30
2009-01-01 07:30:50 路人乙 0 1
2009-01-01 07:31:00 路人甲 2 1
2009-01-01 07:31:10 路人乙 1 0 --路人乙 发生c_status = 1 的时长为: 00:00:20
2009-01-01 07:31:50 路人甲 1 2 --路人甲 发生c_status = 1 的时长为: 00:00:50
其中 D_Date记录的是C_STATUS开始的时间
现在要统计: 各个人员,C_STATUS = '1' 的最长持续时间 按天统计,例如:
日期 人员 最长持续时间
2009-01-01 路人甲 00:00:50
2009-01-01 路人乙 00:00:30
请问如何做到高效的统计出所需要的数据 ,谢谢.
from (
select D_Date,C_USER,C_STATUS,C_SUBSTATUS,D_Date-lag(D_Date,1,D_Date)over(partition by C_USER order by D_Date) tim
from table ) aa
where C_STATUS=1
group by TO_CHAR(D_Date,'YYYY-MM-DD'),C_USER
;时长没有转成timestamp,不大熟悉。时长的单位转成了秒。
c_status =1 时长 是 它发生时 相对上一个 C_status 任意状态的时间差么?