Heim > Datenbank > MySQL-Tutorial > Wie kann SQL Änderungen in Spaltenwerten im Laufe der Zeit identifizieren?

Wie kann SQL Änderungen in Spaltenwerten im Laufe der Zeit identifizieren?

Mary-Kate Olsen
Freigeben: 2024-12-21 18:54:09
Original
816 Leute haben es durchsucht

How Can SQL Identify Changes in Column Values Over Time?

Änderungen in Spaltenwerten mithilfe von SQL identifizieren

Problem:

Angenommen, Sie haben eine Tabelle mit zwei Spalten: Wert und Zeit. Sie möchten Zeilen identifizieren, in denen sich die Spalte „Wert“ geändert hat. Mit anderen Worten, Sie müssen die Momente finden, in denen sich der gespeicherte Wert geändert hat, gekennzeichnet durch markierte Zeilen.

Lösung:

Ein Ansatz zur Lösung dieses Problems besteht in der Nutzung von Fenstern Funktionen und Zeilennummern innerhalb einer SQL-Anweisung:

  1. Zeile einführen Zahlen:

    WITH x AS (
        SELECT value, time, rn = ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Time)
        FROM dbo.table
    )
    Nach dem Login kopieren

    Dieser Schritt führt eine neue Spalte namens rn (Zeilennummer) ein, die jeder Zeile innerhalb jeder Wertpartition eine eindeutige Sequenznummer in aufsteigender Reihenfolge der Zeit zuweist.

  2. Änderungen identifizieren:

    SELECT * FROM x WHERE rn = 1;
    Nach dem Login kopieren

    Diese Abfrage filtert die Ergebnisse nach Schließen Sie nur Zeilen mit rn gleich 1 ein. Dies sind die ersten Zeilen in jeder Wertpartition, die den Beginn von Wertänderungen darstellen.

Zusätzliche Überlegungen zu steigenden und fallenden Werten:

Wenn die Spalte „Wert“ sowohl steigen als auch fallen kann, ist der Ansatz komplexer erforderlich:

  1. Temporäre Tabelle erstellen:

    DECLARE @x TABLE(value INT, [time] DATETIME)
    
    INSERT @x VALUES
    (0,'20120615 8:03:43 PM'),
    (1,'20120615 8:03:43 PM'),
    (1,'20120615 8:03:48 PM'),
    (1,'20120615 8:03:53 PM'),
    (1,'20120615 8:03:58 PM'),
    (2,'20120615 8:04:03 PM'),
    (2,'20120615 8:04:08 PM'),
    (3,'20120615 8:04:13 PM'),
    (3,'20120615 8:04:18 PM'),
    (3,'20120615 8:04:23 PM'),
    (2,'20120615 8:04:28 PM'),
    (2,'20120615 8:04:33 PM');
    Nach dem Login kopieren

    Erstellen Sie eine temporäre Tabelle mit den Beispieldaten, um den Prozess zu veranschaulichen.

  2. Zeilennummern einführen (Noch einmal):

    WITH x AS (
        SELECT *, rn = ROW_NUMBER() OVER (ORDER BY time)
        FROM @x
    )
    Nach dem Login kopieren
  3. Wertänderungen identifizieren:

    SELECT x.value, x.[time]
    FROM x LEFT OUTER JOIN x AS y
    ON x.rn = y.rn + 1
    AND x.value <> y.value
    WHERE y.value IS NOT NULL;
    Nach dem Login kopieren

    Diese Abfrage führt einen linken äußeren Join zwischen den aus Tabelle mit den Zeilennummern und einer verschobenen Version von sich selbst (y), um nach Änderungen in der Spalte „Wert“ zwischen benachbarten Zeilen zu suchen. Zeilen mit Nicht-NULL-Werten für y.value stellen Änderungen dar.

Das obige ist der detaillierte Inhalt vonWie kann SQL Änderungen in Spaltenwerten im Laufe der Zeit identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage