计算不同门店从2022年1月1日至3月17日期间处于暂停配货、开通配货的累计天数

nsdfg 2022-03-18 17:58:57

计算不同门店从202211日至317日期间处于暂停配货、开通配货的累计天数,希望能实现的结果如EF列,麻烦各位大佬帮看看sql怎么写?

 

...全文
285 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinger126 2022-04-02
  • 打赏
  • 举报
回复

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次都是暂停配货

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧