SQL或LINQ:如何选择仅更改一个参数的记录?

问题描述 投票:-2回答:1

说我们有此列表:

Id  IdRef   myColumn    anotherColumn
448    70      1            228
449    70      1            2s8
451    70      1            228
455    70      2            2a8
456    70      2            s28
457    70      2            28
458    70      3            v
459    70      3            28
460    70      4            22
461    70      3            54
462    70      4            45
463    70      3            s28

每次“ myColumn”更改时,我都需要选择一个带有记录的列表。因此结果将是:

    Id  IdRef   myColumn    anotherColumn
448    70      1            228
455    70      2            2a8
458    70      3            v
460    70      4            22
461    70      3            54
462    70      4            45
463    70      3            s28
sql linq gaps-and-islands
1个回答
2
投票

这是一个空白和孤岛的问题。在SQL中,这是一种使用窗口函数解决它的方法:

select Id, IdRef, myColumn, anotherColumn
from (
    select t.*, lag(myColumn) over(partition by IdRef order by Id) lagMyColumn
    from mytable t
) t
where lagMyColumn is null or lagMyColumn <> myColumn

内部查询恢复上一个行上的myColumn的值,按Id排序。然后,外部查询将根据记录中的值与当前行中的值不同的记录进行过滤。

Demo on DB Fiddle

id | idref | mycolumn |另一列-:| ----:| -------:| :------------448 | 70 | 1 | 228455 | 70 | 2 | 2a8458 | 70 | 3 | v460 | 70 | 4 | 22461 | 70 | 3 | 54462 | 70 | 4 | 45463 | 70 | 3 | s28
© www.soinside.com 2019 - 2024. All rights reserved.