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

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

用的维度表如下:

用sql计算两个日期的间隔天数 ,去除周末_第1张图片

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

用sql计算两个日期的间隔天数 ,去除周末_第2张图片

你可能感兴趣的:(sql,数据库)