一尘不染

在 +/- 5 天范围内更新联合日期列(最小绝对值)

sql

我正在尝试找到一种方法,根据 4 个参数用另一个 SQL 表自动填充一个 SQL 表(我将把这个查询实现到逻辑应用系统中的存储过程中)。

我有一个逻辑应用程序,它自动在 SQL 表中插入行(来自认知服务源)
我们称之为table1

表格1:

specs brand category start_date end_date signal
Xy-eee2 mercury alpha 05/12/2021 16/12/2021 NULL
Xd-FFF21 venus beta 20/03/2021 25/04/2021 NULL

我想用table2中存在的列“signal”填充这个table1(我的认知服务填充 table1 的所有列,除了“signal” - 谁出现 NULL)

表2:

brand category start_date end_date signal
mercury alpha 12/12/2021 15/12/2021 action1
venus beta 22/03/2021 20/04/2021 action2
mercury alpha 09/12/2021 20/12/2021 action3
mercury alpha 06/12/2021 17/12/2021 action4

将 table2.signal 中的数据插入 table1.signal 有 4 个条件:

table1.brand = table2.brand  **AND**  
table1.category = table2.category **AND**  
table1.start_date (+/- 5 days range) = table2. start_date **AND**  
table1.end_date (+/- 5 days range)= table2. end_date 

挑战:*我需要通过在 5 天范围内(负或正)找到最小绝对值来在日期时间进行联合。日期很少会匹配到 table1 和 table2 之间的简单相等。表 2 日期是真实的来源,一些 * 人决定不尊重这些日期,通过在表 1 中 +/- 5 天的范围内开始信号

我开始编写这段代码,但我看不到我的日期时间范围是否可行:

UPDATE
   t1
SET
   t1.signal = t2.signal,
FROM
   table1 as t1,
   table2 as t2
WHERE
   t1.brand = t2.brand
   AND t1.category = t2.category
   AND t1.start_date = t2.start_date
   AND t1.end_date = t2.end_date

如果一切正常,那么我的table1示例应该在第 1 行收到信号“动作 4”(动作 1 和 2 日期超出范围,动作 3 的绝对值日期差比动作 4 更大)
我的table1第 2 行应该接收事件动作 2。

非常感谢那些为我找到解决方案的人。


阅读 82

收藏
2022-07-21

共1个答案

一尘不染

您需要使用DATEADD()命令来获取范围。

UPDATE
   t1
SET
   t1.signal = t2.signal,
FROM
   table1 as t1,
   table2 as t2
WHERE
   t1.brand = t2.brand
   AND t1.category = t2.category
   AND t2.start_date BETWEEN DATEADD(day ,-5 ,t1.start_date) AND DATEADD(day ,5 ,t1.start_date)
   AND t2.end_date BETWEEN DATEADD(day ,-5 ,t1.end_date) AND DATEADD(day ,5 ,t1.end_date)
2022-07-21