更新表中一列为最大值的列

Rob*_*ton 3 sql duplicates

我正在尝试更新表中一系列约 113000 行中的一列。我有一个表,其中包含有问题的 MRN、遭遇和承认列。我遇到过一个问题,一次遭遇多次进入该表,但 MRNS 不同。我想更新名为“消息”的列,其值为“重复遭遇”,但前提是该遭遇不是最新承认的日期。

例如

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
Run Code Online (Sandbox Code Playgroud)

对于上述信息,我想更新第 1 行和第 2 行的消息列,因为第 3 行是遇到 000000000497 的最新接纳日期。第 5 行和第 6 行是 000000000719 的最新接纳日期,因为第 4 行是其最新接纳日期。

我尝试在这里搜索但找不到任何结果。我只是不知道是否需要为此创建一个光标或什么。任何帮助将非常感激。

Mar*_*ers 5

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
)
Run Code Online (Sandbox Code Playgroud)

您还可以使用联接:

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
Run Code Online (Sandbox Code Playgroud)