如何在查找表中查找周数

时间:2017-04-05 16:02:14

标签: sql sql-server tsql

我有两张桌子 一个是 WeekNumber 的查找表 Weekdate

enter image description here

另一个是注册

enter image description here

我想要返回的是Week表中的当前WeekLabel,其中Entrytime在两个日期之间落下

例如:

  • 入境时间2016-08-15 09:02:15.0000000
  • 介于Weekstartdate值2016-08-15 00:00:00.0002016-08-22 00:00:00.000
  • 之间
  • 所以我想从周表中返回 WeekLabel 1和 WeekStartdate 2016-08-15等等。

4 个答案:

答案 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