SQL更新语句,其中值必须大于先前值但小于下一个值

时间:2016-10-28 13:20:58

标签: sql sql-server

知道这个问题的适当标题是什么。 我一直在努力解决这个问题。 我有两张桌子。 表1:保存对象ID,电子邮件日期和响应标志的记录 表2:保存对象ID的记录和响应日期。

我需要更新表1的响应标志,但由于每个表中有相同对象ID的多条记录,因此表2中的响应日期必须大于上一个电子邮件日期,但小于表中的下一个电子邮件日期2。

期望的结果

enter image description here

非常感谢任何帮助或建议。 提前感谢你。

1 个答案:

答案 0 :(得分:1)

您可以通过加入执行此操作。我们将简单地查找Table2中与ObjectId匹配的行,并且具有最小的ResponseDate,即>我们的EmailDate使用具有最大的EmailDate的行<我们的ResponseDate。

UPDATE t1
SET t1.ResponseFlag = (CASE WHEN t2.ObjectId IS NOT NULL THEN 1 ELSE 0 END)
FROM Table1 t1
LEFT JOIN Table2 t2 ON t2.ObjectId = t1.ObjectId AND
                       t1.EmailDate = (SELECT MAX(EmailDate) FROM Table1
                                       WHERE ObjectId = t1.ObjectId AND EmailDate < t2.ResponseDate) AND
                       t2.ResponseDate = (SELECT MIN(ResponseDate) FROM Table2
                                          WHERE ObjectId = t1.ObjectId AND ResponseDate > t1.EmailDate)