从两个表值更新sql查询
我有两个表,其值存储如下 表1 表2 第一个表应从第二个表更新如下。i、 e结果值从两个表值更新sql查询,sql,sql-server,tsql,sql-server-2005,Sql,Sql Server,Tsql,Sql Server 2005,我有两个表,其值存储如下 表1 表2 第一个表应从第二个表更新如下。i、 e结果值 ReferranceID StatusNumber ServiceType T2OpenDt T1OpenDT 162987 399519 Orthopaedic Surgery 2010-11-17 2011-08-19 162987 399525 Acupunct
ReferranceID StatusNumber ServiceType T2OpenDt T1OpenDT
162987 399519 Orthopaedic Surgery 2010-11-17 2011-08-19
162987 399525 Acupuncture 2010-11-17 2011-08-19
162987 413405 Anesthesiology 2010-11-17 2011-09-28
162987 517174 Chiropractic 2012-02-22 2012-04-26
“2010-11-17”将分3行更新,因为T2OpenDate小于T1Opendate,并且
2012-02-22仅发生一次,因为该日期略大于其他3个顶级开放日期,而小于第4个开放日期
有人能为我推荐上面的更新sqlquery吗。非常感谢你帮助我
UPDATE Table1
SET T2OpenDate = (SELECT MAX(Table2.T2OpenDate)
FROM Table2
WHERE Table2.T2OpenDate < Table1.T1OpenDate)
FROM Table1
根据Aaron Bertrand的commnet编辑
如果您想更好地掌握这项特殊技能,我建议您阅读以下内容:如果表2中有其他行用于同一推荐,该怎么办?例如,状态已关闭并多次重新打开?可以有任意数量的状态,如关闭/打开/重新打开。我们必须选择日期的最大值,该值应小于T1OpenDate。这并不能为第四行提供正确答案。您可以通过在订单中添加描述或删除描述并将TOP 1更改为MAX来解决此问题。@AaronBertrand非常感谢您的评论,我编辑了我的答案,现在我认为它有效。谢谢Daniloquio。我尝试了您的查询,正如Aaron Bertrand建议的那样,我在脚本中添加了“DESC”的顺序,结果准确无误。非常感谢您提供的快速解决方案。我稍微修改了上面的脚本,以在测试后获得实际值。更新T1 SET T2OpenDate=从表2中选择TOP 1 Table2.T2OpenDate,其中Table2.T2OpenDate
ReferranceID StatusNumber ServiceType T2OpenDt T1OpenDT
162987 399519 Orthopaedic Surgery 2010-11-17 2011-08-19
162987 399525 Acupuncture 2010-11-17 2011-08-19
162987 413405 Anesthesiology 2010-11-17 2011-09-28
162987 517174 Chiropractic 2012-02-22 2012-04-26
UPDATE Table1
SET T2OpenDate = (SELECT MAX(Table2.T2OpenDate)
FROM Table2
WHERE Table2.T2OpenDate < Table1.T1OpenDate)
FROM Table1