用sql计算两个日期的间隔天数 ,去除周末

2024-01-08 21:46:02

快递行业,经常需要计算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

用的维度表如下:

返回结果如下:根据实际情况可以调整。

文章来源:https://blog.csdn.net/lilizhenzhu/article/details/135462733
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。