带内联、分组和中间的TSQL更新

带内联、分组和中间的TSQL更新,tsql,Tsql,我想从当前日期和原始日期之间的最早开始日期更新日期。我的问题是: update TableA set [Stop_Date] =DATA.Min_Start FROM TableA JOiN (select min(TableB.START_DTTM ) as Min_Start from TableB where TableB.CancelReason ='Treatment' AN

我想从当前日期和原始日期之间的最早开始日期更新日期。我的问题是:

update TableA
set [Stop_Date] =DATA.Min_Start
FROM TableA
JOiN
    (select min(TableB.START_DTTM ) as Min_Start
            from TableB
            where 
                TableB.CancelReason ='Treatment'            AND
                TableA.Start_Date>=TableB.START_DTTM        AND
                TableB.START_DTTM  '< GETDATE()
        ) DATA
            ON          TableA.Ref_No=TableB.REFRL_REFNO
            where
                [Stop_Date] is null

您的条件
TableA.Start\u Date>=TableB.Start\u DTTM和TableB.Start\u DTTM'
是错误的。这将表B的值限制为开始日期之前和小于当前日期的值,而不是介于两者之间的值

下面的方法似乎有效

UPDATE    TableA
SET  Stop_Date = 
   (
   SELECT MIN(TableB.START_DTTM)  
   FROM TableB 
   WHERE 
     TableA.Ref_No = TableB.REFRL_REFNO
   AND (TableB.CancelReason = 'Treatment') 
   AND (TableB.START_DTTM BETWEEN TableA.[Start_Date] AND GETDATE())
   )
WHERE (TableA.Stop_Date IS NULL)

您的条件
TableA.Start\u Date>=TableB.Start\u DTTM和TableB.Start\u DTTM'
是错误的。这将表B的值限制为开始日期之前和小于当前日期的值,而不是介于两者之间的值

下面的方法似乎有效

UPDATE    TableA
SET  Stop_Date = 
   (
   SELECT MIN(TableB.START_DTTM)  
   FROM TableB 
   WHERE 
     TableA.Ref_No = TableB.REFRL_REFNO
   AND (TableB.CancelReason = 'Treatment') 
   AND (TableB.START_DTTM BETWEEN TableA.[Start_Date] AND GETDATE())
   )
WHERE (TableA.Stop_Date IS NULL)

。。。和TableB.START\u DTTM)
-这看起来不像是一个完整的表达式。对不起,“
。。。和TableB.START\u DTTM)
-这看起来不像是一个完整的表达式。抱歉,这个