小编典典

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

sql

说我们有这个清单:

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

阅读 234

收藏
2021-04-15

共1个答案

小编典典

这是一个鸿沟和孤岛的问题。在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。然后,外部查询将根据记录中的值与当前行中的值不同的记录进行过滤。

DB
Fiddle上的演示

id | idref | mycolumn | 另一列
-:| ----:| -------:| :------------
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
2021-04-15