我在表格中添加了一个新列。表格的列是:
Identifier(unique identity but not joinable to the other table)
ClinicalID(int)
senttime(datetime)
orgID(int-new column)
我需要根据发送的时间从不同的表更新新列。 我应该检查发送时间的日期范围,并相应地更新orgID。 另一个表的列:
ClinicalIDentifier
org ID(int)
old orgID(int)
effectivefromtime
effectivethrutime
我面临的问题是,如果发送时间是>从另一个表的有效时间开始,它显示发送时间> 1的相同ClinicalID的其他组织ID。从时间开始。
我被困在比较日期范围。
如果您需要任何进一步的信息,请与我们联系
答案 0 :(得分:0)
WITH CTE AS
(
SELECT
FirstTable.OrgID NewOrgID,
SecondTable.OrgID
FROM
FirstTable
LEFT JOIN SecondTable
ON FirstTable.ClinicalID = SecondTable.ClinicalIndetifier
AND FirstTable.SentTime > SecondTable.EffectiveFromTime
AND FirstTable.SentTime < SecondTable.EffectiveThruTime
)
UPDATE CTE
SET NewOrgID = OrgID
我无法从你的问题中看出表名是什么或它们是如何加入的,但我认为应该这样做。要测试CTE,您应该用UPDATE
替换上面的整个SELECT * FROM CTE
语句,并为每个NewOrgID显示NULL,OrgID将显示将在每行中填充的值。如果你想确定你可以修改CTE,使它包含FirstTable和SecondTable中的所有列。
答案 1 :(得分:0)
得到了!!
select
case when (effectivethrutime is null and senttime >= effectivefromtime) then orgid
when (effectivethrutime is not null and senttime >= effectivefromtime) then orgID
when (effectivethrutime is not null and senttime between effectivethrutime and effectivefromtime) then orgid
end as orgid
from ac
left join op
on ac.clinicalidentifier=op.clinicalidentifier
where ac.senttime>op.effectivefromtime
and ac.senttime<=isnull(op.effectivethrutime,ac.senttime)
现在有效。
如果我需要进行任何更正,请告诉我
由于
豪尔