说我们有这个清单:
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中,这是一种使用窗口函数解决它的方法:
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。然后,外部查询将根据记录中的值与当前行中的值不同的记录进行过滤。
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