SQL查询获取最近的日期

时间:2014-08-08 18:14:32

标签: sql sql-server sql-server-2008

我有一个非常复杂的查询。我有两张桌子如下。

表1

EmployeeId Status DateA

   A        BIL   1/1
   A        BON   2/1
   A        BIL   2/1 
   A        BIL   3/1 
   A        BIL   4/1 
   A        BIL   5/1
   A        BIL   6/1

表2:

Employee ID  Reason ExDate   DateB

   A          IN   1/1     
   A          OUT  4/15       **4/1**
   A          IN   6/1
   A          OUT  8/15       **9/1**

所以,问题是。我想用表1中的日期A的值更新表2中的DateB列。其条件是

  1. 表1中的原因列= BIL
  2. 我想从日期A列中选择该日期,该列最接近(30天间隔)到ExDate,原因列值=' OUT'
  3. 我主要是坚持第二个声明。

    感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这是MS-SQL 2005还是更晚?如果是这样,请尝试:

select * 
from table2 t2 cross apply (select top 1 dateA from table1 where status = 'BIL' order by abs(datediff(d, dateA, exDate))) t1

如果看起来正确,那么你可以:

UPDATE t2 SET DateB = t1.DateA
from table2 t2 cross apply (...