Interroger des lignes avec des valeurs de colonne modifiées à l'aide de SQL
Comment identifier les instances de changements de valeur de colonne dans une table ? Cette requête permet d'identifier les lignes où des valeurs de colonnes spécifiques ont subi des modifications.
Pour illustrer, considérons le tableau suivant :
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
L'objectif est de sélectionner les lignes marquées d'astérisques, indiquant les changements de valeur. Ceci est crucial pour déterminer les intervalles de temps associés à ces modifications, qui peuvent être exploités pour d'autres requêtes de base de données.
Solution :
Implémentation d'une requête SQL avec des fonctions de fenêtre et numéros de ligne, nous dérivons le souhaité lignes :
;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;
Explication :
Considérations supplémentaires :
SELECT * FROM table WHERE value <> LAG(value) OVER (ORDER BY time);
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;
En exploitant la puissance des fonctions de fenêtre SQL, cette requête récupère efficacement les lignes où les valeurs des colonnes ont changé, fournissant ainsi des informations précieuses sur les fluctuations des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!