Sql server 正在sql server上获取加入3个表的最近日期

Sql server 正在sql server上获取加入3个表的最近日期,sql-server,Sql Server,我有三张桌子 表Test1:Test1ID(主键)、TestID(外键)、版本、Test1Date、编号 表Test2:Test2ID(主键)、TestID(外键) 表Test3:Test3ID(主键)、Test2ID(外键)、Test3Date、版本 样本数据: 测试1: Test1ID TestID版本Test1Date编号 101 201 3 2016-05-03 45 102 201 3

我有三张桌子

  • Test1:Test1ID(主键)、TestID(外键)、版本、Test1Date、编号
  • Test2:Test2ID(主键)、TestID(外键)
  • Test3:Test3ID(主键)、Test2ID(外键)、Test3Date、版本
样本数据:

测试1: Test1ID TestID版本Test1Date编号 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 测试2: Test2ID TestID 501 201

测试3: Test3ID Test2ID版本Test3Date
601 201空2016-05-05
602 201空2016-06-08
603201空2016-08-01

期望输出:

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


我想更新Test3.Version=Test1.Version,其中Test3.Date与Test1.Date最接近,小于或等于

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
structure?似乎您没有使用它。

使用
按日期排序差异()…限制

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
structure?您似乎没有使用它。

这段代码有限制1,这是针对mysql的。这个问题清楚地标记为sql server。是的,输入错误。。我想我累了:)@seanlangethance@sagi,我现在无法测试你的查询,但测试后会更新此帖子。@sagi查询对我无效。我还需要Test2,因为Test1和Test3是通过Test2连接的,即Test1.TestID=Test2.TestID和Test2.Test2ID=Test3.test2idt这段代码有限制1,这是针对mysql的。这个问题清楚地标记为sql server。是的,输入错误。。我想我累了:)@seanlangethance@sagi,我现在无法测试你的查询,但测试后会更新此帖子。@sagi查询对我无效。此外,我还需要Test2,因为Test1和Test3是通过Test2连接的,即Test1.TestID=Test2.TestID和Test2.Test2ID=Test3.Test2IDWe可以在这里猜测答案,可能会接近,但如果您可以发布一些示例数据和所需的输出,这将非常有用。这里有一个很好的地方可以看到一些例子。我们可以在这里猜测答案,可能会接近,但如果您可以发布一些示例数据和所需的输出,这将非常有用。这里有一个很好的地方可以看到一些例子。