首页 > 解决方案 > 用 NULL 替换重复列值的优化解决方案

问题描述

我有一个具有以下结构和数据的表:

时间 公司 属性A 属性 属性
2020 年 12 月 4 日 13:21 测试A 12 1 2
2020 年 12 月 4 日 13:21 测试B 1 2 44
2020 年 12 月 4 日 13:22 测试B 34 3 44
2020 年 12 月 4 日 13:22 测试A 12 4 5
2020 年 12 月 4 日 13:21 测试C 15 5 4

我想要实现的是以下内容:

按照上述逻辑,我试图创建的视图应该返回给我这样的数据:

时间 公司 属性A 属性 属性
2020 年 12 月 4 日 13:21 测试A 空值 1 2
2020 年 12 月 4 日 13:21 测试B 1 2 空值
2020 年 12 月 4 日 13:22 测试B 34 3 空值
2020 年 12 月 4 日 13:22 测试A 空值 4 5
2020 年 12 月 4 日 13:21 测试C 15 5 4

我已经碰壁了。谁能帮帮我吗?

标签: sql

解决方案


您可以使用lead()lag()

select t.*,
       (case when lead(attria) over (partition by company order by time) = attria or
                  lag(attria) over (partition by company order by time) = attria
             then null
             else attria
        end),
       (case when lead(attrib) over (partition by company order by time) = attrib or
                  lag(attrib) over (partition by company order by time) = attrib
             then null
             else attrib
        end),
       (case when lead(attric) over (partition by company order by time) = attric or
                  lag(attric) over (partition by company order by time) = attric
             then null
             else attric
        end)
from t

推荐阅读