快递行业,经常需要计算2个节点的时效,有的计算自然日,有时候需要计算去掉周末的时效,计算自然日很简单,用函数datediff 就可以了,计算工作日时效,我的实现方法如下,借助了一个日期维度表。
SELECT t0.[date_key]
,t1.date_key as date_key2
,t0.[day_abbreviation]
,t0.[date_value]
,sum(case when t1.[day_abbreviation] in ('Sat','Sun') or t1.is_holiday=1 then 0 else 1 end )as 间隔天数
into #a
FROM [Data_Magic].[dbo].[dim_date] t0
left join [Data_Magic].[dbo].[dim_date] t1
on t1.[date_value]>=t0.[date_value] and t1.[date_value]<='2023-04-13'
where t0.[date_value]>='2023-04-01' and t0.[date_value]<'2023-04-14'
group by t0.[date_key]
,t0.[day_abbreviation]
,t0.[date_value]
,t1.date_key
select a.DATE_KEY,a.date_key2,sum(b.间隔天数) 间隔天数
from
#a a
left join
#a b
on b.date_key2<=a.date_key2 and b.date_key=a.date_key
group by a.DATE_KEY,a.date_key2
order by date_key,date_key2
用的维度表如下:
返回结果如下:根据实际情况可以调整。