2016-11-23 96 views
0

我有3個表獲得最接近的日期加入3代表的SQL Server

  • Test1的:Test1ID(主鍵),TestID(國外),版本,Test1Date,數
  • 的Test2: Test2ID(主鍵),TestID(外國)
  • Test3的:Test3ID(主鍵),Test2ID(國外),Test3Date,版本

樣本數據:

的Test1: Test1ID TestID Version Test1Date Number 101 201 3 2016-05-03 45 102 201 3 2016-05-06 45 103 201 5 2016-08-01 45 104 202 2 2016-02-01 34 的Test2: Test2ID TestID 501 201

Test3的: Test3ID Test2ID Version Test3Date
601 201 NULL 2016-05-05
602 201 NULL 2016-06-08
603 201 NULL 2016-08-01

所需的輸出:

Test3ID Test2ID Version Test3Date
601 201 3 2016-05-05
602 201 3 2016-06-08
603 201 5 2016-08-01

我想更新Test3.Versio N = Test1.Version其中Test3.Date是最接近較小或等於Test1.Date

+2

我們可以猜測答案在這裏,可能會接近,但如果你可以發佈一些樣本數據和所需的輸出,這將是非常有用的。這裏是看一些例子的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

回答

3

使用ORDER BY DATEDIFF()..LIMIT

UPDATE Test3 t 
SET t.version = (SELECT TOP 1 s.version FROM Test2 s 
       WHERE s.testID = t.test3ID 
       ORDER BY ABS(DATEDIFF(DAY, s.test1Date,t.Test3Date))) 

順便說一句 - 你爲什麼張貼Test2結構?似乎不像你正在使用它。

+0

此代碼有限制1,這是對於MySQL。這個問題顯然標記爲sql server。 –

+0

是的,錯字..猜我累了:) @SeanLange – sagi

+0

謝謝@sagi,我目前無法測試您的查詢,但會在測試後更新此帖子。 – sharmav1