17,086
社区成员
发帖
与我相关
我的任务
分享
--对不起上面有点小问题,这个
with test as(
select to_date('2010-2-23 8:45:56','yyyy-mm-dd hh24:mi:ss') insettime, 1 status from dual union
select to_date('2010-2-23 8:50:52','yyyy-mm-dd hh24:mi:ss') insettime, 1 status from dual union
select to_date('2010-2-23 8:56:19','yyyy-mm-dd hh24:mi:ss') insettime, 2 status from dual union
select to_date('2010-2-23 8:59:34','yyyy-mm-dd hh24:mi:ss') insettime, 1 status from dual union
select to_date('2010-2-23 9:42:11','yyyy-mm-dd hh24:mi:ss') insettime, 2 status from dual
)
SELECT SUM(sub_time)*86400 "时间差之和(秒)"
FROM (SELECT insettime, insettime - lag(insettime) over(ORDER BY insettime) sub_time, status
FROM (SELECT insettime, status, lag(status) over(ORDER BY insettime) pre_status FROM test)
WHERE pre_status IS NULL OR
status <> pre_status)
WHERE status = '2';
--计算时间差的和,单位是天,其它可以自行转换
with test as(
select to_date('2010-2-23 8:45:56','yyyy-mm-dd hh24:mi:ss') insettime, 1 status from dual union
select to_date('2010-2-23 8:50:52','yyyy-mm-dd hh24:mi:ss') insettime, 1 status from dual union
select to_date('2010-2-23 8:56:19','yyyy-mm-dd hh24:mi:ss') insettime, 2 status from dual union
select to_date('2010-2-23 8:59:34','yyyy-mm-dd hh24:mi:ss') insettime, 1 status from dual union
select to_date('2010-2-23 9:42:11','yyyy-mm-dd hh24:mi:ss') insettime, 2 status from dual
)
SELECT SUM(sub_time) total_day
FROM (SELECT insettime, insettime - lag(insettime) over(ORDER BY insettime) sub_time, status
FROM (SELECT insettime, status, lag(status) over(ORDER BY insettime) pre_status FROM test)
WHERE pre_status IS NULL OR
status <> pre_status);