Duplicate session Records - 结束除最新记录外的所有记录

问题描述 投票:0回答:1

我正在尝试识别 sql server 上日志表中的重复会话。

用户一次只能打开一个登录会话,但有时当应用程序崩溃时,它会使用户会话保持打开状态,从而导致问题。

我想找到所有具有多个打开会话的用户(结束日期将为空),然后在除最新打开会话之外的所有用户上设置结束日期。

示例表列是 用户名、开始时间、结束时间

示例数据

henrya  2023-03-30 11:15:00.493 NULL
henrya  2023-03-30 11:00:00.493 NULL
henrya  2023-03-30 10:15:00.493 10:30:00.493
qwertya  2023-03-30 12:15:00.493 NULL
qwertya  2023-03-30 12:00:00.493 NULL
qwertya  2023-03-30 10:15:00.493 NULL

我很难使用更新脚本来结束除每个用户的最新会话之外的所有会话。

sql sql-server tsql duplicates greatest-n-per-group
1个回答
0
投票

要查找所有额外的行,您可以使用

ROW_NUMBER
。您可以为此使用可更新的 CTE 或子查询,并直接对其进行更新而无需重新加入

WITH cte AS (
    SELECT *,
      rn = ROW_NUMBER() OVER (PARTITION BY Username ORDER BY start_time DESC)
    FROM YourTable
    WHERE end_time IS NULL
)
UPDATE cte
SET end_time = SYSUTCDATETIME()
WHERE rn > 1;
© www.soinside.com 2019 - 2024. All rights reserved.