Обновление TSQL со встроенным, группированием и между - PullRequest
1 голос
/ 15 июля 2010

Я хочу обновить дату с самой ранней даты начала, которая происходит между текущей датой и первоначальной датой. У меня есть запрос:

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?

Вот некоторые тестовые данные:

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'

1 Ответ

1 голос
/ 15 июля 2010

Ваше состояние TableA.Start_Date>=TableB.START_DTTM AND TableB.START_DTTM '< GETDATE() неверно. Это ограничивает значения 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...