Sql 如何在查找表中查找周数

Sql 如何在查找表中查找周数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张桌子 一种是查找工作周编号和工作日的表周 另一个是注册 我想返回的是Week表中的当前WeekLabel,其中Entrytime位于两个日期之间 例如: 入场时间2016-08-15 09:02:15.0000000 介于周开始日期值2016-08-15 00:00:00.000和2016-08-22 00:00:00.000之间 所以我想从week table返回WeekLabel 1和WeekStartdate 2016-08-15,以此类推。。 用于获取在EntryTime之前或当

我有两张桌子 一种是查找工作周编号和工作日的表周

另一个是注册

我想返回的是Week表中的当前WeekLabel,其中Entrytime位于两个日期之间

例如:

入场时间2016-08-15 09:02:15.0000000 介于周开始日期值2016-08-15 00:00:00.000和2016-08-22 00:00:00.000之间 所以我想从week table返回WeekLabel 1和WeekStartdate 2016-08-15,以此类推。。 用于获取在EntryTime之前或当天发生的最新WeekStartDate

切换到外部应用以实现左连接功能,例如,如果没有相应的WeekLabel,则返回null

用于获取在EntryTime之前或之后发生的最新的WeekStartDate


切换到外部应用以实现左连接功能,例如,如果没有相应的WeekLabel,则返回null

您可以根据entrytime大于weekstartdate来加入表;这将使前几周的每个条目成倍增加,因此您可以获得最新的条目,假设它们不断增加,则该条目的最大值为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

您可以根据entrytime大于weekstartdate来加入表;这将使前几周的每个条目成倍增加,因此您可以获得最新的条目,假设它们不断增加,则该条目的最大值为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

另一个选项是使用datediff函数连接到week引用表:

SELECT * from 
register r 
join [Week] w on 
     DATEDIFF(day, r.entryTime, w.weekStartDate) between 0 and 7

另一个选项是使用datediff函数连接到week引用表:

SELECT * from 
register r 
join [Week] w on 
     DATEDIFF(day, r.entryTime, w.weekStartDate) between 0 and 7

另一个选项是简单连接

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)

另一个选项是简单连接

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)

可爱的简单方法,但不应该是DATEADDDAY,8。。。读DATEADDDAY,7。。。?示例:2016-08-15+7=2016-08-22。这两个都已更正。@目标数据。。。我想得太多了。谢谢你的帮助,我们都会去的!很好的方法,避免使用相关子查询或不必要的聚合。很简单的方法,但不应该DATEADDDAY,8。。。读DATEADDDAY,7。。。?示例:2016-08-15+7=2016-08-22。这两个都已更正。@目标数据。。。我想得太多了。谢谢你的帮助,我们都会去的!很好的方法,可以避免使用相关子查询或不必要的聚合。