22,209
社区成员
计算不同门店从2022年1月1日至3月17日期间处于暂停配货、开通配货的累计天数,希望能实现的结果如E、F列,麻烦各位大佬帮看看sql怎么写?
if object_id('tempdb..#配货') is not null drop table #配货
create table #配货(门店 nvarchar(20),配货控制 nvarchar(10),生效日期 date,累计暂停配货天数 int,累计开通配货天数 int)
insert into #配货(门店,配货控制,生效日期,累计暂停配货天数,累计开通配货天数)
select '006','开通配货','2022-01-23',0,29
union all
select '006','暂停配货','2022-02-03',0,0
union all
select '006','开通配货','2022-02-06',0,0
union all
select '006','暂停配货','2022-03-15',0,0
union all
select '006','开通配货','2022-03-17',0,0
;with t as (
select *,LAG(配货控制,1) over(partition by 门店 order by 生效日期) 上次配货控制,
LAG(生效日期,1) over(partition by 门店 order by 生效日期) 上次生效日期
from #配货 )
select *,sum(case when 上次配货控制 is null then 累计暂停配货天数
when 上次配货控制='暂停配货' then 累计暂停配货天数+DATEDIFF(day,上次生效日期,生效日期)
else 0 end) over(partition by 门店 order by 生效日期) 累计暂停配送天数,
sum(case when 上次配货控制 is null then 累计开通配货天数
when 上次配货控制='开通配货' then 累计开通配货天数+DATEDIFF(day,上次生效日期,生效日期)
else 0 end) over(partition by 门店 order by 生效日期) 累计开通配货天数
from t
你截图的第一行数据,应该是有问题的,连续2次都是暂停配货