Heim >Datenbank >MySQL-Tutorial >Wie identifiziere ich SQL-Zeilen, deren Spaltenwerte sich geändert haben?

Wie identifiziere ich SQL-Zeilen, deren Spaltenwerte sich geändert haben?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-26 20:43:10201Durchsuche

How to Identify SQL Rows Where Column Values Have Changed?

Zeilen mit geänderten Spaltenwerten mithilfe von SQL abfragen

Wie kann man die Instanzen von Spaltenwertänderungen innerhalb einer Tabelle genau bestimmen? Diese Abfrage ermöglicht die Identifizierung von Zeilen, in denen bestimmte Spaltenwerte geändert wurden.

Betrachten Sie zur Veranschaulichung die folgende Tabelle:

Value    Time
0        15/06/2012 8:03:43 PM
1        15/06/2012 8:03:43 PM     *
1        15/06/2012 8:03:48 PM 
1        15/06/2012 8:03:53 PM
1        15/06/2012 8:03:58 PM     
2        15/06/2012 8:04:03 PM     *
2        15/06/2012 8:04:08 PM
3        15/06/2012 8:04:13 PM     *
3        15/06/2012 8:04:18 PM
3        15/06/2012 8:04:23 PM
2        15/06/2012 8:04:28 PM     *
2        15/06/2012 8:04:33 PM     

Das Ziel besteht darin, die mit Sternchen markierten Zeilen auszuwählen. Wertänderungen anzeigen. Dies ist entscheidend für die Bestimmung der mit diesen Änderungen verbundenen Zeitintervalle, die für andere Datenbankabfragen genutzt werden können.

Lösung:

Implementierung einer SQL-Abfrage mit Fensterfunktionen und Zeilennummern, wir leiten die gewünschten ab Zeilen:

;WITH x AS
(
  SELECT value, time, rn = ROW_NUMBER() OVER 
  (PARTITION BY Value ORDER BY Time)
  FROM dbo.table
)
SELECT * FROM x WHERE rn = 1;

Erklärung:

  1. Die Funktion ROW_NUMBER() weist aufeinanderfolgende Zeilennummern innerhalb jeder Partition basierend auf der Wertspalte zu und erstellt so Gruppen von identische Werte.
  2. Die nachfolgende Bedingung WHERE rn = 1 wählt nur die erste Zeile innerhalb jeder Gruppe aus, die das anfängliche Vorkommen jedes einzelnen Merkmals darstellt Wert.

Zusätzliche Überlegungen:

  • Nur ​​für steigende Werte wird die Lösung einfacher:
SELECT * FROM table WHERE value <> LAG(value) OVER (ORDER BY time);
  • Wenn die Werte sowohl nach oben als auch nach unten schwanken, ist ein etwas langsamerer Ansatz erforderlich erforderlich:
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');

;WITH x AS
(
  SELECT *, rn = ROW_NUMBER() OVER (ORDER BY time)
  FROM @x
)
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;

Durch die Nutzung der Leistungsfähigkeit der Fensterfunktionen von SQL ruft diese Abfrage effektiv die Zeilen ab, in denen sich Spaltenwerte geändert haben, und liefert so wertvolle Einblicke in Datenschwankungen.

Das obige ist der detaillierte Inhalt vonWie identifiziere ich SQL-Zeilen, deren Spaltenwerte sich geändert haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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