day09 返修率

select * from sdata.dbo.cost_detail
drop table sdata.dbo.cost_detail_now


--根据SERVICE_ORDER_LINE 取最小的值 因为一个订单 可能换的很多零件,只统计一个--
select *
into sdata.dbo.cost_detail_now
from (
select COUNTRY_ID
, MACHINE_SERIAL_NUMBER
,SERVICE_ORDER_ID
,SERVICE_ORDER_LINE
,SERVICE_ORDER_CREATION_DATE
,PRODUCT_GROUP_OPS
,service_order_closure_date
,ROW_NUMBER() over(partition by MACHINE_SERIAL_NUMBER
,SERVICE_ORDER_ID order by SERVICE_ORDER_LINE asc) as rows
from sdata.dbo.cost_detail) a
where rows = 1
select * from sdata.dbo.cost_detail_now


--根据两次返修的日期 算返修率 根据型号统计两次返修相差多少天--
drop table pdata.dbo.kpi_rrr
select
now1.COUNTRY_ID
,now1.MACHINE_SERIAL_NUMBER
,now1.PRODUCT_GROUP_OPS
,now1.SERVICE_ORDER_CREATION_DATE SERVICE_ORDER_CREATION_DATE_now
,now1.Service_Order_Closure_Date Service_Order_Closure_Date_now
--,before.MACHINE_SERIAL_NUMBER
,now1.SERVICE_ORDER_ID
--,before.SERVICE_ORDER_ID
,before.SERVICE_ORDER_CREATION_DATE SERVICE_ORDER_CREATION_DATE_before
,before.Service_Order_Closure_Date Service_Order_Closure_Date_before
--相差多少天--
,DATEDIFF(dd,cast(case when before.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else before.SERVICE_ORDER_CREATION_DATE end as date )
,cast(case when now1.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else now1.SERVICE_ORDER_CREATION_DATE end as date )) day_count

--统计>30或60或90的--
,case when DATEDIFF(dd,cast(case when before.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else before.SERVICE_ORDER_CREATION_DATE end as date )
,cast(case when now1.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else now1.SERVICE_ORDER_CREATION_DATE end as date ))>=30 then 1 else 0 end rrr_30
,case when DATEDIFF(dd,cast(case when before.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else before.SERVICE_ORDER_CREATION_DATE end as date )
,cast(case when now1.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else now1.SERVICE_ORDER_CREATION_DATE end as date ))>=60 then 1 else 0 end rrr_60
,case when DATEDIFF(dd,cast(case when before.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else before.SERVICE_ORDER_CREATION_DATE end as date )
,cast(case when now1.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else now1.SERVICE_ORDER_CREATION_DATE end as date ))>=90 then 1 else 0 end rrr_90

into pdata.dbo.kpi_rrr
from sdata.dbo.cost_detail_now now1
left join sdata.dbo.cost_detail_now before
on now1.MACHINE_SERIAL_NUMBER = before.MACHINE_SERIAL_NUMBER
and cast(case when now1.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else now1.SERVICE_ORDER_CREATION_DATE end as date )
>= cast(case when before.SERVICE_ORDER_CREATION_DATE='00:00.0' then null else before.SERVICE_ORDER_CREATION_DATE end as date )
where before.MACHINE_SERIAL_NUMBER is not null

select * from pdata.dbo.kpi_rrr

--根据 ops 日期 统计求和--
select COUNTRY_ID
,PRODUCT_GROUP_OPS
,CONVERT(varchar(7),cast(SERVICE_ORDER_CREATION_DATE_now as date),120) month
,sum(rrr_30) rrr_30
,sum(rrr_60) rrr_60
,sum(rrr_90) rrr_90
into pmart.dbo.kpi_rrr_sum
from pdata.dbo.kpi_rrr
group by
COUNTRY_ID
,PRODUCT_GROUP_OPS
,CONVERT(varchar(7),cast(SERVICE_ORDER_CREATION_DATE_now as date),120)


--按照rrr_30的进行分组排序--
select*from (
select *,
ROW_NUMBER() over(partition by PRODUCT_GROUP_OPS order by rrr_30 desc ) as rov_sum
from pmart.dbo.kpi_rrr_sum)a
where rov_sum <=5


--统计两个日期间的天数--
select DATEDIFF(dd,'2008-11-29','2008-11-30')

原文地址:https://www.cnblogs.com/simly/p/9488442.html