SQL 高级查询
2015-10-15 19:19
295 查看
WITH FINISHMAINT (FRAMENO,DELIVEREDDATE) AS ( SELECT DISTINCT RP.FRAMENO, MAX(PRC.DELIVEREDDATE) OVER(PARTITION BY RP.FRAMENO) FROM RT_REPAIR RP LEFT JOIN RT_REPAIRPART P ON RP.REPAIRNO=P.REPAIRNO LEFT JOIN RT_RepairProcess PRC ON RP.REPAIRNO=PRC.REPAIRNO WHERE RP.StatusCode = '99'AND value(RP.Deleted,'0') = '0' AND P.PARTNO LIKE '15400%' AND VALUE(P.ActualOutQty,0)-VALUE(P.ReturnedQty,0)>0 ), DELAYTASKS(FRAMENO,NEXTSTEPTIME) AS ( SELECT DEF.FRAMENO,RECDT.NEXTSTEPTIME FROM RT_CALLTASKRECDT RECDT LEFT JOIN RT_CALLTASKDEF DEF ON RECDT.TASKID=DEF.TASKID WHERE RECDT.Conclusion='02' AND RECDT.NextStepTime IS NOT NULL AND YEAR(RECDT.NextStepTime) = 2015 AND (DEF.CANCELED = '0' OR (DEF.CANCELED = '1' AND RECDT.NEXTSTEPTIME > DEF.CANCELTIME) ) ) SELECT COUNT(1) AS DELAYTASKCOUNT FROM DELAYTASKS LEFT JOIN FINISHMAINT ON DELAYTASKS.FRAMENO=FINISHMAINT.FRAMENO WHERE FINISHMAINT.DELIVEREDDATE > DELAYTASKS.NEXTSTEPTIME ------------------------------------------------------ WITH FINISHMAINT (FRAMENO,DELIVEREDDATE) AS ( SELECT DISTINCT RP.FRAMENO, MAX(PRC.DELIVEREDDATE) OVER(PARTITION BY RP.FRAMENO) FROM RT_REPAIR RP LEFT JOIN RT_REPAIRPART P ON RP.REPAIRNO=P.REPAIRNO LEFT JOIN RT_RepairProcess PRC ON RP.REPAIRNO=PRC.REPAIRNO WHERE RP.StatusCode = '99'AND value(RP.Deleted,'0') = '0' AND P.PARTNO LIKE '15400%' AND VALUE(P.ActualOutQty,0)-VALUE(P.ReturnedQty,0)>0 ), DELAYTASKS(FRAMENO,NEXTSTEPTIME) AS ( SELECT DEF.FRAMENO,RECDT.NEXTSTEPTIME FROM RT_CALLTASKRECDT RECDT LEFT JOIN RT_CALLTASKDEF DEF ON RECDT.TASKID=DEF.TASKID WHERE RECDT.Conclusion='02' AND RECDT.NextStepTime IS NOT NULL AND YEAR(RECDT.NextStepTime) = 2015 AND (DEF.CANCELED = '0' OR (DEF.CANCELED = '1' AND RECDT.NEXTSTEPTIME > DEF.CANCELTIME) ) ) SELECT MONTH(DELAYTASKS.NEXTSTEPTIME) MON,COUNT(1) AS DELAYTASKCOUNT FROM DELAYTASKS LEFT JOIN FINISHMAINT ON DELAYTASKS.FRAMENO=FINISHMAINT.FRAMENO WHERE FINISHMAINT.DELIVEREDDATE > DELAYTASKS.NEXTSTEPTIME GROUP BY MONTH(DELAYTASKS.NEXTSTEPTIME) ----------------------------------------- WITH FINISHMAINT (FRAMENO,DELIVEREDDATE) AS ( SELECT DISTINCT RP.FRAMENO, MAX(PRC.DELIVEREDDATE) OVER(PARTITION BY RP.FRAMENO) FROM RT_REPAIR RP LEFT JOIN RT_REPAIRPART P ON RP.REPAIRNO=P.REPAIRNO LEFT JOIN RT_RepairProcess PRC ON RP.REPAIRNO=PRC.REPAIRNO WHERE RP.StatusCode = '99'AND value(RP.Deleted,'0') = '0' AND P.PARTNO LIKE '15400%' AND VALUE(P.ActualOutQty,0)-VALUE(P.ReturnedQty,0)>0 ), DELAYTASKS(FRAMENO,NEXTSTEPTIME) AS ( SELECT DEF.FRAMENO,RECDT.NEXTSTEPTIME FROM RT_CALLTASKRECDT RECDT LEFT JOIN RT_CALLTASKDEF DEF ON RECDT.TASKID=DEF.TASKID WHERE RECDT.Conclusion='02' AND RECDT.NextStepTime IS NOT NULL AND YEAR(RECDT.NextStepTime) = 2015 AND (DEF.CANCELED = '0' OR (DEF.CANCELED = '1' AND RECDT.NEXTSTEPTIME > DEF.CANCELTIME) ) ) SELECT MON,SUM(DELAYTASKCOUNT) AS DELAYTASKCOUNT FROM ( SELECT 1 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 2 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 3 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 4 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 5 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 6 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 7 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 8 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 9 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 10 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 11 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 12 AS MON,0 AS DELAYTASKCOUNT FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT MONTH(DELAYTASKS.NEXTSTEPTIME) MON,COUNT(1) AS DELAYTASKCOUNT FROM DELAYTASKS LEFT JOIN FINISHMAINT ON DELAYTASKS.FRAMENO=FINISHMAINT.FRAMENO WHERE FINISHMAINT.DELIVEREDDATE > DELAYTASKS.NEXTSTEPTIME GROUP BY MONTH(DELAYTASKS.NEXTSTEPTIME) ) T GROUP BY MON -------------------------------------------------- WITH FINISHMAINT (FRAMENO,DELIVEREDDATE) AS ( SELECT DISTINCT RP.FRAMENO, MAX(PRC.DELIVEREDDATE) OVER(PARTITION BY RP.FRAMENO) FROM RT_REPAIR RP LEFT JOIN RT_REPAIRPART P ON RP.REPAIRNO=P.REPAIRNO LEFT JOIN RT_REPAIRPROCESS PRC ON RP.REPAIRNO=PRC.REPAIRNO WHERE RP.STATUSCODE = '99'AND VALUE(RP.DELETED,'0') = '0' AND P.PARTNO LIKE '15400%' AND VALUE(P.ACTUALOUTQTY,0)-VALUE(P.RETURNEDQTY,0)>0 ), TBACK(FRAMENO,EXPECTSTARTDATE) AS ( SELECT DEF.FRAMENO,DEF.EXPECTSTARTDATE FROM RT_CALLTASKDEF DEF WHERE DEF.EXPECTSTARTDATE >= '2014-12-01' AND DEF.EXPECTSTARTDATE<='2015-11-30' ) SELECT MONTH(TBACK.EXPECTSTARTDATE + 1 MONTH) AS MON, COUNT(1) AS TBACKCOUNT FROM TBACK LEFT JOIN FINISHMAINT ON TBACK.FRAMENO=FINISHMAINT.FRAMENO WHERE DATE(FINISHMAINT.DELIVEREDDATE) >= TBACK.EXPECTSTARTDATE-7 DAYS AND DATE(FINISHMAINT.DELIVEREDDATE) <= TBACK.EXPECTSTARTDATE +30 DAYS GROUP BY MONTH(TBACK.EXPECTSTARTDATE + 1 MONTH) ------------------------------------------------- WITH FINISHMAINT (FRAMENO,DELIVEREDDATE) AS ( SELECT DISTINCT RP.FRAMENO, MAX(PRC.DELIVEREDDATE) OVER(PARTITION BY RP.FRAMENO) FROM RT_REPAIR RP LEFT JOIN RT_REPAIRPART P ON RP.REPAIRNO=P.REPAIRNO LEFT JOIN RT_REPAIRPROCESS PRC ON RP.REPAIRNO=PRC.REPAIRNO WHERE RP.STATUSCODE = '99'AND VALUE(RP.DELETED,'0') = '0' AND P.PARTNO LIKE '15400%' AND VALUE(P.ACTUALOUTQTY,0)-VALUE(P.RETURNEDQTY,0)>0 ), TBACK(FRAMENO,EXPECTSTARTDATE,TASKID) AS ( SELECT DEF.FRAMENO,DEF.EXPECTSTARTDATE,DEF.TASKID FROM RT_CALLTASKDEF DEF WHERE DEF.EXPECTSTARTDATE >= '2014-12-01' AND DEF.EXPECTSTARTDATE<='2015-11-30' ), TIMEPERTASK (TASKID,CALLTIMES) AS ( SELECT DEF.TASKID, COUNT(1) AS CALLTIMES FROM RT_CALLTASKRECDT RECDT LEFT JOIN RT_CALLTASKDEF DEF ON RECDT.TASKID=DEF.TASKID WHERE RECDT.ACTIONMETHOD='PH' GROUP BY DEF.TASKID ), ABC(TASKID, EXPECTSTARTDATE) AS ( SELECT TBACK.TASKID,TBACK.EXPECTSTARTDATE FROM TBACK LEFT JOIN FINISHMAINT ON TBACK.FRAMENO=FINISHMAINT.FRAMENO WHERE DATE(FINISHMAINT.DELIVEREDDATE) >= TBACK.EXPECTSTARTDATE-7 DAYS AND DATE(FINISHMAINT.DELIVEREDDATE) <= TBACK.EXPECTSTARTDATE +30 DAYS ) SELECT MONTH(EXPECTSTARTDATE + 1 MONTH) AS MON, SUM(TIMEPERTASK.CALLTIMES) AS CALLTIMES FROM ABC INNER JOIN TIMEPERTASK ON ABC.TASKID=TIMEPERTASK.TASKID GROUP BY MONTH(EXPECTSTARTDATE + 1 MONTH)
相关文章推荐
- Oracle坏块问题总结
- Redis 3.0中文官方文档翻译计划(2)
- SQL 几个常用的函数
- Redis 3.0中文官方文档翻译计划(1)
- MySQL数据库加密和解密~认证登陆密码(mysql.user)和MySQL不区分大小写
- MySql 加锁问题
- SQL测试
- sql 循环语句几种方式
- 浅谈数据库生命周期
- MySQL 查询单条数据多次与一次查询多条数据的比较
- 使用Phoenix通过sql语句更新操作hbase数据
- Oracle 健康监控器(Health Monitor)
- MySQL 常用命令
- TSql order by Clause 排序列的多种写法
- mysql反引号的应用
- 转:redis常用命令
- Oracle 中多个字段显示成一列
- ERROR 2006 (HY000): MySQL server has gone away
- MySQL旧版本ORDER BY 方法
- Oracle中对现有表增加列