Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从两个表值更新sql查询_Sql_Sql Server_Tsql_Sql Server 2005 - Fatal编程技术网

从两个表值更新sql查询

从两个表值更新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

我有两个表,其值存储如下

表1

表2

第一个表应从第二个表更新如下。i、 e结果值

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.T2OpenDateReferranceID 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