答案 0 :(得分:0)
尝试使用lag()函数
select * from
(
select *,lag(PRD,1,0) over(order by PRD,LOCID,FILEID) as pvalue
from tablename
)x where isnull(PRD,'1970-01-01')<>isnull(pvalue,'1970-01-01')
答案 1 :(得分:0)
您要使用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
比较,因此NULL
使比较逻辑稍微复杂一点。
这假设fileid
是行的顺序。如果不是这种情况,则order by
必须是指定顺序的列。