我是 SQL Server 2008 的初学者,我很难找到以下问题的解决方案:
我想做一个 SELECT 来消除具有相同“stat”的连续行并只保留最后一次出现。
为了让大家更好的理解,我给大家举个例子:
My table Results
idLigne | id | statut idLigne | id | stat
L1 1 A L2 1 A
L2 1 A L6 1 B
L3 1 B L7 1 A
L4 1 B ====> L8 1 B
L5 1 B
L6 1 B
L7 1 A
L8 1 B
谢谢你。
最佳答案
如果您将行号分配给结果集,您可能会在行号和行号 - 1 上连接“当前”和“上一个”记录;如果 statut 不是 t2 中的同一行,则将被清除。测试这会给我们没有前辈的行。
; with transformed as (
select idLigne,
statut,
row_number () over (order by idLigne) rn
from myTable
)
select myTable.*
from myTable
inner join transformed t1
on myTable.idLigne = t1.idLigne
left join transformed t2
on t1.rn = t2.rn - 1
and t1.statut = t2.statut
where t2.rn is null
演示位于 Sql Fiddle 。