sql >> データベース >  >> RDS >> Sqlserver

SQL Server で現在の行と前の行を比較する

    次のクエリを使用できます:

    SELECT RaidNo, OutComeID, RN,
           CASE 
              WHEN OutComeID <> 16 THEN 0
              ELSE ROW_NUMBER() OVER (PARTITION BY OutComeID, grp ORDER BY RN) 
           END AS Result
    FROM (
       SELECT RaidNo, OutComeID, RN,
              RN - ROW_NUMBER() OVER (PARTITION BY OutComeID ORDER BY RN) AS grp
       FROM mytable) AS t
    ORDER BY RN
    

    フィールド grp 同じ OutComeID を持つ連続したレコードのスライス (アイランドとも呼ばれます) を識別します 価値。外側のクエリは grp を使用します '16' に属する各レコードを列挙するために スライス。他のスライスに属するレコードには値 0 が割り当てられます .

    デモはこちら




    1. 実際のテーブルから行を削除する前に、関連するテーブルから行を削除するトリガー

    2. テーブル全体で変更データキャプチャ(CDC)を有効にする方法、またはSQLServerの列のリストを使用してテーブルでCDCを有効にする方法

    3. Sqlcmdをサーバーに接続する方法は?

    4. SQL ServerでのCOUNT()のしくみ