sql >> Databáze >  >> RDS >> Sqlserver

Jak sledovat změny v záznamech na serveru SQL?

Jedním ze způsobů, jak toho dosáhnout, je použít ROW_NUMBER funkce s dělením pro zjištění, kdy je hodnota Department změny sloupce.

Ukázková 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');

Dotaz

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
;

Výsledek

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


  1. Vyberte prvních 150 řádků, pak dalších 150 a tak dále?

  2. Spouštěče MYSQL:JSON_SEARCH celočíselná hodnota v poli json celých čísel

  3. Funkce RTRIM() v Oracle

  4. Laravel – PDO Připravené prohlášení – Nelze provádět dotazy, dokud jsou aktivní jiné dotazy bez vyrovnávací paměti