我有两张桌子 一个是 WeekNumber 的查找表周和 Weekdate
另一个是注册
我想要返回的是Week表中的当前WeekLabel,其中Entrytime在两个日期之间落下
例如:
2016-08-15 09:02:15.0000000
2016-08-15 00:00:00.000
和2016-08-22 00:00:00.000
答案 0 :(得分:3)
使用cross apply()
获取WeekStartDate
之前或之后发生的最新EntryTime
。
select r.*
, x.WeekLabel
from register r
cross apply (
select top 1 w.WeekLabel
from [Week] w
where w.weekstartdate =< r.entrytime
order by w.weekstartdate desc
) as x
切换到outer apply()
left join
功能,例如如果没有相应的null
,请返回WeekLabel
。
答案 1 :(得分:2)
您可以根据entrytime
大于weekstartdate
加入表格;这将使前几周的每个条目相乘,因此您可以在max
上获得WeekLabel
的最新条目(假设它们不断增加)。
select t2.ID, t2.CODE, max(t1.WeekLabel)
from Week t1
join Register t2
on t2.Entrytime > t1.Weekstartdate
group by t2.ID, t2.CODE
答案 2 :(得分:1)
另一种选择是简单的JOIN
Select R.*
,W.WeekLabel
,W.WeekStartdate
From Register R
Join [Week] W
on R.EntryTime >= W.WeekStartDate
and R.EntryTime < DateAdd(DAY,7,W.WeekStartDate)
答案 3 :(得分:0)
另一种选择是使用datediff
函数加入周参考表:
SELECT * from
register r
join [Week] w on
DATEDIFF(day, r.entryTime, w.weekStartDate) between 0 and 7