select * from (select c.*,rownum rn from(
SELECT distinct a.热线工单号,漏水地址,派工时间,反馈时间,
to_char(填单时间,'yyyy/mm/dd hh24:mi:ss') as 填单时间,
a.签证时间,
CASE
WHEN ((反馈时间 is null) and (day_count(sysdate , 派工时间) * 24 * 60 - 处结时间)<= 0) or ((day_count(反馈时间 , 派工时间) * 24 * 60 - 处结时间) <= 0) THEN '正常'
WHEN ((反馈时间 is null) and (day_count(sysdate , 派工时间) * 24 * 60 - 处结时间)> 0) or ((day_count(反馈时间 , 派工时间) * 24 * 60 - 处结时间) > 0) THEN '超时'
ELSE '异常' END AS 回复情况,
CASE
when ((填单时间 is null) and day_count(sysdate,反馈时间)>3) or ((是否审核通过 >= 1) and day_count(填单时间, 反馈时间)>3) then '超时'
WHEN ((是否审核通过 >= 1) and day_count(填单时间 , 反馈时间) <=3) or ((填单时间 is null) and day_count(sysdate , 反馈时间) <=3) THEN '正常'
ELSE '其他情况' END AS 填单情况,
CASE
when (a.签证时间 is null) and day_count(sysdate , 填单时间) >3 THEN '超时(未签证)'
when ((a.签证时间 is null) and day_count(sysdate , 填单时间) <= 3) THEN '正常(未签证)'
WHEN (是否审核通过 = 2 AND day_count(a.签证时间 , 填单时间) > 3) THEN '超时(已签证)'
WHEN (是否审核通过 = 2 AND day_count(a.签证时间 , 填单时间) <= 3) THEN '正常(已签证)'
ELSE '其他情况' END AS 签证情况 ,
b.热线工单号 as 工单 ,a.rowid rid,b.rowid rb FROM JINANFIXINFO a left join jinanfixrz b on a.热线工单号=b.热线工单号 where 是否审核通过<>5 ORDER BY a.派工时间 desc)c where rownum <=30 ) where rn>0
我调试了,是由于case 和 when 太多,去掉其中几个速度会很多,全部都执行的话需要等好几分钟(几万条记录),请问各位大神,有没有什么比较快的办法?谢谢. ..!!
搞成存储过程,速度应该会好一些吧【oracle引擎不能每次分析这么复杂的sql】