我是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
谢谢。
答案 0 :(得分:3)
如果将行号分配给结果集,则可以在行号和行号上连接“当前”和“上一个”记录 - 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。