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、版本
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可以在这里猜测答案,可能会接近,但如果您可以发布一些示例数据和所需的输出,这将非常有用。这里有一个很好的地方可以看到一些例子。我们可以在这里猜测答案,可能会接近,但如果您可以发布一些示例数据和所需的输出,这将非常有用。这里有一个很好的地方可以看到一些例子。