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;
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);
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!