sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan sporer man ændringer i poster i SQL Server?

En måde at gøre det på er at bruge ROW_NUMBER funktion med partitionering for at registrere, hvornår værdien af ​​Department kolonneændringer.

Eksempel på data

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');

Forespørgsel

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
;

Resultat

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


  1. Postgres:tjek om array-feltet indeholder værdi?

  2. Meddelelse af den generelle tilgængelighed af SQL Safe Backup 8.7.2

  3. Sådan undslipper du firkantede parenteser inden for firkantede parenteser for feltnavn

  4. Hvordan deler jeg SQL LocalDb med andre brugere på samme maskine?