>데이터 베이스 >MySQL 튜토리얼 >SQL Server 2008에서 LEAD 및 LAG 기능을 복제하는 방법은 무엇입니까?

SQL Server 2008에서 LEAD 및 LAG 기능을 복제하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-28 21:23:11978검색

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

SQL Server 2008의 LEAD LAG 기능 대체

SQL Server 2008에서는 LEAD 및 LAG 기능을 사용할 수 없기 때문에 비교할 때 문제가 발생합니다. 현재 행과 후속 행의 값. 이 문서에서는 이 기능이 필요한 SQL Server 2008 사용자를 위한 대체 방법을 살펴봅니다.

다음 및 이전 행 쿼리

목표는 현재 행이 있는 행을 격리하는 것입니다. StatusId는 1이고 다음 행의 StatusId는 6이며, 두 행 모두 동일한 분 타임스탬프를 갖습니다. LEAD 및 LAG 기능을 사용할 수 없으므로 self-join을 사용할 수 있습니다.

Self-Join 접근 방식

다음 쿼리는 테이블(참조: t) 및 "다음 행" 테이블(tnext라고 함). 조인 조건은 다음과 같습니다.

  • 인접 행을 나타내는 일치하는 ID 값
  • t의 StatusId가 1이며 원하는 상태의 현재 행을 나타냄
  • tnext의 StatusId는 6이며, 대상 상태가 있는 후속 행을 나타냅니다.
  • 시간 차이: MinStartTime 필드 사이를 60초 미만으로 유지하여 시간의 근접성을 보장

정확한 분 일치 쿼리

정확한 분 일치가 필요한 경우- 분 근접한 경우 datepart(분, t.MinStartTime) = datepart(분, 조건을 포함하도록 쿼리를 수정할 수 있습니다. tnext.MinStartTime).

쿼리 예

제공된 테이블을 예로 사용하여 쿼리의 두 가지 버전은 다음과 같습니다.

버전 1(분 이내) 근접성):

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;

버전 2(정확한 분 일치):

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

출력

이 쿼리의 출력은 지정된 기준(ID 6)을 충족하는 원하는 행을 검색합니다. StatusId는 1이고 그 뒤에는 같은 분 타임스탬프에 StatusId 6이 있는 ID가 옵니다(버전 2의 경우).

위 내용은 SQL Server 2008에서 LEAD 및 LAG 기능을 복제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.