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 № 1Votre 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)