sql - 根据与另一个表比较的条件将新的数据行插入到表中
问题描述
我有一个跟踪器表,它跟踪与我们的客户关联的某个数字,称为“跟踪器”。该表如下所示:
customer_id value date_of_value
11111 2 2020-12-14
23332 6 2021-01-15
此表从另一个名为“Values”的表中获取此信息,该表与上面的表完全相同,但没有 date_of_value 列。该表每天都在更新,与客户关联的值会被新值覆盖。我想做的是创建一个小作业,以便“跟踪器”表查看“值”表以查看值是否已更新。如果是这样,我想在“跟踪器”表中插入一个新行,其中包含客户 ID、新值和值更改日期。在我看来,查询看起来像这样:
CASE WHEN Tracker.value != Values.value
THEN INSERT INTO Tracker (customer_id, value, date_of_value)
VALUES (Values.id, values.value, GETDATE())
我尝试将它与 UPDATE 语句一起使用,但它们都不起作用。理想情况下,“跟踪器”表将如下所示:
customerr_id value date_of_value
11111 2 2020-12-14
2332 6 2021-01-15
11111 3 2021-01-22
2332 8 2021-01-24
如何设置此查询,以便在创建作业时插入包含更新信息的新行?当我尝试使用 UPDATE 方法时,它覆盖了“Tracker”表中的信息。
解决方案
嗯。. . 您需要表中的最新值tracker
。然后将其与现有值进行比较,并在有差异的地方插入:
INSERT INTO Tracker (customer_id, value, date_of_value)
SELECT v.customer_id, v.value, GETDATE()
FROM (SELECT v.*,
ROW_NUMBER() OVER (PARTITION BY v.customer_id ORDER BY v.value DESC) as seqnum
FROM values v
) v LEFT JOIN
Tracker t
ON v.customer_id = t.customer_id AND
v.value = t.value
WHERE v.seqnum = 1 AND t.customer_id IS NULL;
推荐阅读
- macos - 使用 maven 的 Scala 项目的问题
- oracle - 有没有查找空白的功能?
- c# - 如何将 JDF 文件转换为 PDF(从多编码文档中删除文本)
- javascript - 打开我的网站时会打开一个带有两个选项的弹出窗口
- javascript - 在 Javascript 上执行映射的问题
- postgresql - Hibernate '必须在调用 save() 之前手动分配此类的 id' 但映射的数据已经包含 id
- python - QTextBrowser html链接不可点击
- python - 考虑字段中的零值的字节字符串反序列化
- java - 无状态弹簧应用程序 - JSESSIONID 仍然生成
- jsp - 如何使用 wget 保存 JavaServer HTML 页面?