Maison > base de données > tutoriel mysql > Comment répliquer les fonctionnalités SQL LEAD et LAG dans SQL Server 2008 ?

Comment répliquer les fonctionnalités SQL LEAD et LAG dans SQL Server 2008 ?

Patricia Arquette
Libérer: 2024-12-17 22:27:11
original
904 Les gens l'ont consulté

How to Replicate SQL LEAD and LAG Functionality in SQL Server 2008?

Alternatives aux fonctions SQL LEAD et LAG dans SQL Server 2008

Dans SQL Server 2008, les fonctions LEAD et LAG ne sont pas disponibles, ce qui peut posent des problèmes lors de la comparaison des valeurs entre des lignes consécutives. Ce guide présente des approches alternatives pour obtenir des fonctionnalités similaires.

Énoncé du problème

L'objectif est d'identifier les lignes où la ligne actuelle a un StatusId de 1 et la ligne suivante a un StatusId de 6, les heures étant comprises dans la même minute. Par exemple, dans le tableau fourni, nous souhaitons récupérer l'ID de ligne 6 car l'ID de ligne 6 a un StatusId de 1 et l'ID de ligne 7 a un StatusId de 6, et leurs heures sont essentiellement les mêmes : 2014-02-19 06 : 11.

Solution 1 : Auto-adhésion

Une approche est 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;
Copier après la connexion

Cette requête renvoie les lignes où l'ID de la ligne actuelle est inférieur d'un à l'ID de la ligne suivante, le StatusId est 1 pour la ligne actuelle, 6 pour la ligne suivante , et le décalage horaire entre eux est de 60 secondes.

Solution 2 : même calendrier Minute

Si vous souhaitez que les heures soient dans la même minute calendaire, vous pouvez modifier la requête comme suit :

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);
Copier après la connexion

Cette requête vérifie en outre si les minutes des deux les lignes sont égales, garantissant qu'elles appartiennent à la même minute calendaire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal