Maison >base de données >tutoriel mysql >Comment puis-je rechercher efficacement les anomalies de données entre les lignes adjacentes dans PostgreSQL à l'aide des fonctions de fenêtre ?
Récupération des résultats en comparant la ligne actuelle avec les lignes adjacentes dans PostgreSQL
Dans PostgreSQL, trouver des corrélations et des anomalies entre des lignes adjacentes nécessite une approche spécifique. Un tel exemple consiste à identifier des nombres impairs pris en sandwich entre des nombres pairs. Implémentez cette logique efficacement en tirant parti des fonctions de fenêtre.
Le concept utilise des fonctions de décalage et d'avance, qui extraient respectivement les valeurs précédentes et suivantes d'un décalage spécifié par rapport à la ligne actuelle. Voici une solution raffinée utilisant ces fonctions :
SELECT tokcat.text FROM ( SELECT text, category, chartype, lag(category,1) OVER w as previousCategory, lead(category,1) OVER w as nextCategory FROM token t, textBlockHasToken tb WHERE tb.tokenId = t.id WINDOW w AS ( PARTITION BY textBlockId, sentence ORDER BY textBlockId, sentence, position ) ) tokcat WHERE 'NAME' = previousCategory AND 'NAME' = nextCategory AND 'NAME' <> category
Dans cette requête, la fonction de fenêtre 'w' est définie dans la sous-requête, partitionnant les données par 'textBlockId' et 'sentence' tout en les ordonnant par 'textBlockId' », « phrase » et « position ». Par conséquent, pour chaque ligne, 'previousCategory' contient la catégorie de la ligne précédente, et 'nextCategory' contient la catégorie de la ligne suivante.
Nous filtrons les résultats en vérifiant si la catégorie de la ligne actuelle est différente de ' NAME' tandis que 'previousCategory' et 'nextCategory' correspondent à 'NAME'. Cela nous permet d'identifier les mots sans nom flanqués de catégories de noms.
Alternativement, nous pouvons simplifier la requête :
SELECT text FROM ( SELECT text, category, lag(category) OVER w as previous_cat, lead(category) OVER w as next_cat FROM token t JOIN textblockhastoken tb ON tb.tokenid = t.id WINDOW w AS (PARTITION BY textblockid, sentence ORDER BY position) ) tokcat WHERE category <> 'NAME' AND previous_cat = 'NAME' AND next_cat = 'NAME';
Dans l'ensemble, l'utilisation des fonctions de fenêtre offre un moyen efficace de comparer les lignes adjacentes. dans PostgreSQL, permettant l'identification de modèles de séquence ou d'anomalies spécifiques.
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!