我试图弄清楚此查询中是否有太多移动件。我需要检查一个日期是星期五,相应的值是从下一个星期一开始。任何其他日子,它是第二天。我可以在第二天得到#39;部分工作没有问题,但周五到周一的部分失败。让它变得有点困难的是a.Change_Date是日期格式而b.Load_Date是DateTime格式。
SELECT *
FROM a, b
where a.account_number = b.account_Number
and a.Change_date
case when datepart(dw, a.Change_date) = 5
then BETWEEN (CAST(DATEADD(dd, -4, b.Load_Date) AS DATE)) AND (CAST(DATEADD(dd, -3, b.Load_Date) AS DATE))
else
= CAST(b.Load_Date) AS DATE) and CAST(DATEADD(dd, -1, b.Load_Date) AS DATE)
end
and a.Account_Number in
(XXXXX.....)
有关如何实现这一点的任何想法都表示赞赏。这应该返回最后一个和语句中account_numbers存在的所有行。我今天看了太长时间并没有取得足够的进展。
答案 0 :(得分:0)
我不知道您的完整架构,但这里有一些局部变量的快速示例。
declare @somedate datetime = '2016-04-15 15:17:00.497'--getdate()
declare @nextDate datetime
select @nextDate = case when datepart(dw,@somedate)=6 then @somedate+3 else @somedate+1 end
select @nextDate NextDate