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

SQL Server でレコードの変更を追跡する方法は?

    それを行う 1 つの方法は、ROW_NUMBER を使用することです。 Department の値がいつ検出されるかを検出するパーティショニングを伴う関数 列の変更

    サンプルデータ

    DECLARE @T TABLE (ID int, Department nvarchar(100), dt date);
    INSERT INTO @T (ID, Department, dt) VALUES
    (1, 'English', 'Feb 3 2017'),
    (1, 'English', 'Feb 4 2017'),
    (1, 'Science', 'Mar 1 2017'),
    (1, 'Science', 'Apr 2 2017'),
    (1, 'Maths  ', 'Apr 7 2017'),
    (2, 'Maths  ', 'Feb 1 2017'),
    (2, 'Maths  ', 'Apr 7 2017'),
    (3, 'Maths  ', 'Apr 3 2017'),
    (4, 'Science', 'Feb 1 2017'),
    (4, 'Maths  ', 'Apr 7 2017');
    

    クエリ

    WITH
    CTE
    AS
    (
        SELECT
            ID
            ,Department
            ,dt
            ,ROW_NUMBER() OVER (PARTITION BY ID, Department ORDER BY dt DESC) AS rnPart
            ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY dt DESC) AS rnID
        FROM @T
    )
    SELECT
        ID
        ,Department
        ,dt
    FROM CTE
    WHERE
        rnPart = 1
        AND rnID <> 1
    ORDER BY
        ID
        ,dt
    ;
    

    結果

    +----+------------+------------+
    | ID | Department |     dt     |
    +----+------------+------------+
    |  1 | English    | 2017-02-04 |
    |  1 | Science    | 2017-04-02 |
    |  4 | Science    | 2017-02-01 |
    +----+------------+------------+
    


    1. MySQLで条件付きでインチをcmに変換する方法(またはSELECT中の同様の変換)?

    2. ASCまたはDESC注文の主キー?

    3. PHP / MySQLi:INSERTでのSQLインジェクションを防ぐ方法(コードが部分的に機能している)

    4. DataReaderからDateTimeフィールドにアクセスするときのMySqlConversionException