加入前一个工作日跳过周末

问题描述 投票:0回答:2

我正在尝试根据[Date_Pulled]列之前的工作日来合并数据。例如,我要在星期一[Date_Pulled]提取星期五[date]数据,并在星期二[dates]我要提取星期一的[Date_pulled]数据。

我这样做是为了避免出现空值,因为我们不会在周末生成费率。

[这里我尝试过:

select a.lane, a.them, b.us a.date_pulled, b.date
from table a
left join table2 b on a.lane = b.lane    
    AND A.[DATE_PULLED] = COALESCE(DATEADD(DAY,+1,B.[DATE]),(DATEADD(DAY,+3,B.[DATE])))

enter image description here

sql sql-server coalesce
2个回答
0
投票

类似这样的东西:

from a join
     b
     on (b.date = dateadd(day, -1, a.date) and datename(weekday, a.date) <> 'Monday') or
        (b.date = dateadd(day, -3, a.date) and datename(weekday, a.date) = 'Monday)

注意,这里假定工作日名称为英语国际化设置。


0
投票

您可以使用case表达式算出要回溯多少天,例如

select a.lane, a.them, b.us a.date_pulled, b.[date]
from a
inner join b on a.lane = b.lane
    and b.[date] = dateadd(day, case when datepart(weekday, a.date_pulled) = 2 then -3 else -1 end, a.date_pulled)

注意:假设DATEFIRST设置为7,星期日。调整以适合您的系统。

© www.soinside.com 2019 - 2024. All rights reserved.