2010-07-15 4 views
1

현재 날짜와 원래 날짜 사이에있는 가장 빠른 시작 날짜부터 날짜를 업데이트하려고합니다. 내가 가진 쿼리는 다음과 같습니다.인라인, 그룹화 및 사이에있는 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'   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_Date은 문제를 일으키는 것으로 보입니다. 누구든지 올바른 SQL을 도울 수 있습니까? TableA.Start_Date>=TableB.START_DTTM AND TableB.START_DTTM '< GETDATE()이 잘못

DECLARE @TableA TABLE (Ref_No Int, Stop_Date DateTime,Start_Dat DateTime) 
DECLARE @TableB TABLE (REFRL_REFNO int, CancelReason varchar(50), START_DTTM DateTime, 
    Stop_DTTM DateTime,Comments varchar(50)) 
insert @TableA 
select 1,    '10 jan 2000',    '5 jan 2000' 
insert @TableA 
select 4,    NULL,      '9 jan 2000' 
insert @TableB 
select 1,'Treatment','8 Jan 2000','9 Jan 2000','Shouldn''t be used' 
insert @TableB 
select 4,'Treatment','1 Jan 2000','2 Jan 2000','Shouldn''t be used' 
insert @TableB 
select 4,'Treatment','21 Jan 2000','22 Jan 2000','Shouldn''t be used' 
insert @TableB 
select 4,'Treatment','11 Jan 2000','12 Jan 2000','Should be used' 
insert @TableB 
select 4,'Other','10 Jan 2000','11 Jan 2000','Shouldn''t be used' 
+2

'... AND TableB.START_DTTM)'- 이것은 완전한 표현식처럼 보이지 않습니다. – mdma

+0

죄송합니다. '<'표시가 나타나지 않았습니다. – ClimberM

답변

1

귀하의 조건 : 다음

은 테스트 데이터입니다. 이렇게하면 TableB 값이 시작 날짜 이전의 값과 현재 날짜보다 작은 값으로 제한됩니다.

아래가 작동하는 것 같습니다.

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) 
+0

정말 고마워요. – ClimberM