SQL 或 LINQ:我如何 select 记录只有一个参数发生变化的地方?

SQL or LINQ: how do I select records where only one paramater changes?

假设我们有这个列表:

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" 更改时,我都需要 select 一个包含记录的列表。所以结果将是:

    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 中,这里有一种使用 window 函数解决它的方法:

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 | 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