首页 > 解决方案 > 在 SQL 中的当前记录之前加入一条记录

问题描述

该表列出了特定任务的受让人。一次只能有一个,它可以是一个组或一个用户,每个都属于一个实体。输入新行时,表示受理人已更改。

我正在尝试显示与新受让人之间的转移。在下面的示例中,最早的转移是在 2021 年 7 月 16 日,当时受让人从实体 4444 的组 44 更改为从实体 3333 的用户 333(如下所示将它们连接起来)。

ID 时间戳 团体 用户 实体
1 21-07-2021 11 无效的 1111
2 20-07-2021 22 无效的 2222
3 2021 年 7 月 16 日 无效的 333 3333
4 2021 年 7 月 14 日 44 无效的 4444

预期的

ID 时间戳
1 21-07-2021 22_2222 11_1111
2 20-07-2021 333_3333 22_2222
3 2021 年 7 月 16 日 44_4444 333_3333

我为此使用 Microsoft SQL Server Studio 2018。

标签: sqlsql-server

解决方案


您似乎想要构造“from”和“to”字符串。看起来像:

select t.id, t.timestamp, prev_egu as from_egu, egu as to_egu 
from (select t.*, v.egu,
             lag(v.egu) over (order by timestamp) as prev_egu
      from t cross apply
           (values (concat(entity, '_', coalesce(group, user))(
           ) v(egu)
     ) t
where prev_egu is not null;

推荐阅读