4

私は SQL Server 2008 の初心者であり、次の問題の解決策を見つけるのが困難です。

同じ「統計」を持つ連続する行を削除し、最後の出現のみを保持する SELECT を実行したいと思います。

理解を深めるために、次の例を示します。

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

ありがとうございました。

4

1 に答える 1

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にあります。

于 2012-05-04T10:15:07.650 に答える