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

テーブルから連続範囲を選択

    DECLARE @myTable Table
    (
        N INT,
        C CHAR(1),
        D CHAR(1)
    )
    INSERT INTO @myTable(N,C,D) VALUES(1,  'x', 'a');
    INSERT INTO @myTable(N,C,D) VALUES(2,  'x', 'b');
    INSERT INTO @myTable(N,C,D) VALUES(3,  'x', 'c');
    INSERT INTO @myTable(N,C,D) VALUES(4,  'x', 'd');
    INSERT INTO @myTable(N,C,D) VALUES(6,  'x', 'e');
    INSERT INTO @myTable(N,C,D) VALUES(7,  'x', 'f');
    INSERT INTO @myTable(N,C,D) VALUES(8,  'y', 'g');
    INSERT INTO @myTable(N,C,D) VALUES(9,  'y', 'h');
    INSERT INTO @myTable(N,C,D) VALUES(10, 'y', 'i');
    
    
    WITH StartingPoints AS(
    
        SELECT A.*, ROW_NUMBER() OVER(ORDER BY A.N) AS rownum
        FROM @myTable AS A
        WHERE NOT EXISTS(
            SELECT *
            FROM @myTable B
            WHERE B.C = A.C
              AND B.N = A.N - 1
        )
     ),
     EndingPoints AS(
        SELECT A.*, ROW_NUMBER() OVER(ORDER BY A.N) AS rownum
        FROM @myTable AS A
        WHERE NOT EXISTS (
            SELECT *
            FROM @myTable B
            WHERE B.C = A.C
              AND B.N = A.N + 1
        )
     ) 
    SELECT StartingPoints.C,
           StartingPoints.N AS [N1],
           EndingPoints.N AS [N2],
           StartingPoints.D AS [D1],
           EndingPoints.D AS [D2] 
    FROM StartingPoints
    JOIN EndingPoints ON StartingPoints.rownum = EndingPoints.rownum
    

    結果 :

    C    N1          N2          D1   D2
    ---- ----------- ----------- ---- ----
    x    1           4           a    d
    x    6           7           e    f
    y    8           10          g    i
    


    1. Laravel-カスタムタイムスタンプを頻繁に上書きする...なぜですか?

    2. make_interval()がPostgreSQLでどのように機能するか

    3. W10ユニバーサルアプリをMySQLデータベースに接続する方法

    4. Microsoftは3値フィールドを1ビットに格納できますか?