Maison >base de données >tutoriel mysql >Comment comparer les lignes adjacentes dans SQL Server 2008 sans LEAD ni LAG ?

Comment comparer les lignes adjacentes dans SQL Server 2008 sans LEAD ni LAG ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-29 13:34:18621parcourir

How to Compare Adjacent Rows in SQL Server 2008 Without LEAD and LAG?

Alternatives aux fonctions LEAD et LAG dans SQL Server 2008

Problème :

SQL Server 2008 ne prend pas en charge les fonctions LEAD et LAG. Vous devez déterminer comment comparer la ligne actuelle avec la valeur de la ligne suivante.

Solution :

Une alternative consiste à effectuer une auto-jointure :

SELECT t.*
FROM table t JOIN
     table tnext
     ON t.id = tnext.id - 1 AND
        t.StatusId = 1 AND
        tnext.StatusId = 6 AND
        DATEDIFF(SECOND, t.MinStartTime, tnext.MinStartTime) < 60;

Cette requête renverra les lignes où le statut de la ligne actuelle est 1, le statut de la ligne suivante est 6 et la différence de temps entre les deux lignes est moins de 60 secondes.

Si vous avez besoin d'une correspondance exacte à la minute, vous pouvez modifier la requête :

SELECT t.*
FROM table t JOIN
     table tnext
     ON t.id = tnext.id - 1 AND
        t.StatusId = 1 AND
        tnext.StatusId = 6 AND
        DATEDIFF(SECOND, t.MinStartTime, tnext.MinStartTime) < 60 AND
        DATEPART(MINUTE, t.MinStartTime) = DATEPART(MINUTE, tnext.MinStartTime);

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn