Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Alternative à la fonction de décalage d'avance dans SQL Server 2008

Dans votre cas, le id s semblent être numériques, vous pouvez simplement faire 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;

Ce n'est pas tout à fait la même minute. C'est dans les 60 secondes. Avez-vous réellement besoin de la même minute calendaire ? Si oui, vous pouvez faire :

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