/ / TSQL Update avec inline, grouping et between - tsql

Mise à jour TSQL avec inline, grouping et between - tsql

Je souhaite mettre à jour une date à partir de la date de début la plus ancienne qui se produit entre la date du jour et la date d'origine. La requête que j'ai est:

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

Mais TableA.Start_Date semble causer un problème. Quelqu'un peut-il aider avec le bon SQL?

Voici quelques données de test:

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"

Réponses:

1 pour la réponse № 1

Votre condition TableA.Start_Date>=TableB.START_DTTM AND TableB.START_DTTM "< GETDATE() est faux. Cela limite les valeurs de TableB à celles antérieures à la date de début et inférieures à la date du jour, pas à celles comprises entre les deux.

Le ci-dessous semble fonctionner.

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)