【问题标题】:Getting closest date joining 3 tables sql server获取最近的日期加入 3 个表 sql server
【发布时间】:2016-11-23 13:09:46
【问题描述】:

我有 3 张桌子

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

样本数据:

测试1: 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 测试2: Test2ID TestID 501 201

测试3: 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.Version = Test1.Version 其中 Test3.Date 是最接近的小于或等于 Test1.Date

【问题讨论】:

  • 我们可以在这里猜测一个答案,并且可能会接近,但如果您可以发布一些示例数据和所需的输出,这将非常有帮助。这是查看一些示例的好地方。 spaghettidba.com/2015/04/24/…

标签: sql-server


【解决方案1】:

使用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 结构?你好像没用过。

【讨论】:

  • 此代码的 LIMIT 1 用于 mysql 。这个问题被明确标记为sql server。
  • 是的,错字.. 猜我累了 :) @SeanLange
  • 感谢@sagi,我目前无法测试您的查询,但会在测试后更新此帖子。
  • @sagi 查询对我不起作用。我还需要 Test2 因为 Test1 和 Test3 通过 Test2 连接,即 Test1.TestID = Test2.TestID 和 Test2.Test2ID = Test3.Test2ID
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 2019-05-22
  • 2022-11-22
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多