我正在尝试找到一种方法,根据 4 个参数用另一个 SQL 表自动填充一个 SQL 表(我将把这个查询实现到逻辑应用系统中的存储过程中)。
我有一个逻辑应用程序,它自动在 SQL 表中插入行(来自认知服务源) 我们称之为table1:
表格1:
我想用table2中存在的列“signal”填充这个table1(我的认知服务填充 table1 的所有列,除了“signal” - 谁出现 NULL)
表2:
将 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。
非常感谢那些为我找到解决方案的人。
您需要使用DATEADD()命令来获取范围。
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)