我正在尝试更新表中一系列约113000行的一列。我有一个表格,其中有MRN,遭遇和允许列。我遇到过一个问题,在这个表中多次进入遭遇,但是使用不同的MRNS。我想更新一个名为'Message'的列,其值为'duplicate encounter',但只有在遇到的情况不是最新的日期时才会更新。
例如
Encounter MRN Admitted
000000000497 0000097778 2006-01-04 20:26:00
000000000497 0000092892 2006-03-17 09:51:00
000000000497 0000003023 2008-08-15 09:50:00
000000000719 0000103691 2008-10-16 14:45:00
000000000719 0000048708 2006-05-26 08:04:00
000000000719 0000024123 2006-01-09 15:43:00
000000003390 0000099595 2006-03-13 11:30:00
000000003390 0000079713 2010-04-22 14:40:00
对于上述信息,我想更新第1行和第2行的消息列,因为第3行是遇到000000000497的最新当前行。第5行和第6行为000000000719,因为第4行是其最新的允许日期。< / p>
我试过在这里搜索但是无法想出任何东西。我只是不知道是否需要为此创建游标或什么。任何帮助将非常感激。
答案 0 :(得分:3)
您可以使用子选择查找每个Admitted
的最新Encouter
:
UPDATE T1
SET Message = 'Duplicate'
FROM his..hpf_enc AS T1
WHERE Admitted <>
(
SELECT MAX(Admitted)
FROM his..hpf_enc AS T2
WHERE T1.Encounter = T2.Encounter
)
您也可以使用加入:
UPDATE T1
SET Message = 'Duplicate'
FROM his..hpf_enc T1
JOIN
(
SELECT Encounter, MAX(Admitted) AS Admitted
FROM his..hpf_enc
GROUP BY Encounter
) AS T2
ON T1.Encounter = T2.Encounter
WHERE T1.Admitted <> T2.Admitted
答案 1 :(得分:3)
你可以这样做:
UPDATE a
SET a.Message = 'Duplicate Encounter'
FROM tbl a
INNER JOIN
(
SELECT encounter, MAX(admitted) AS maxadmitted
FROM tbl
GROUP BY encounter
HAVING MAX(MRN) <> MIN(MRN)
) b ON a.encounter = b.encounter AND a.admitted <> b.maxadmitted
子选择只获得具有多个与之关联的不同MRN的遭遇,并且它还获得每次遭遇的最大允许日期。
然后我们只更新与子选择返回的遇到匹配的行,但不更新具有最近允许日期的行。
答案 2 :(得分:0)
您也可以使用RANK()
功能。
UPDATE a
SET a.Message = 'duplicate encounter'
FROM MyTable a
INNER JOIN (
SELECT Encounter
,MRN
,RANK() OVER(PARTITION BY Encounter ORDER BY Admitted DESC) AS RankVal
FROM MyTable) b
ON a.Encounter = b.Encounter
AND a.MRN = b.MRN
AND b.RankVal <> 1