首页 > 解决方案 > 如果值更改,则返回行

问题描述

我有以下输入

在此处输入图像描述

每当 PRD 列值更改时,应返回行。所以我想要的输出如下:

在此处输入图像描述

我的表结构 在此处输入图像描述

标签: sqlsql-server

解决方案


你想用lag(). 我认为这是正确的逻辑:

select * 
from (select t.*,
             lag(prd) over (partition by locid order by fileid) as prev_prd
      from t
     ) t
where (prd <> prev_prd) or
      (prev_prd is null and prd is not null) or
      (prev_prd is not null and prd is null);

SQL Server 没有NULL-safe 比较,因此NULLs 使比较逻辑稍微复杂一些。

这假定这fileid是行的排序。如果不是这种情况,则order by需要是指定排序的列。


推荐阅读