>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 열 값이 변경되는 행을 효율적으로 검색하는 방법은 무엇입니까?

SQL Server에서 열 값이 변경되는 행을 효율적으로 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 19:58:18522검색

How to Efficiently Retrieve Rows Where a Column Value Changes in SQL Server?

변화하는 열 값으로 행 검색

문제:
당신은 특정 열 값의 변경 사항을 기반으로 하는 테이블입니다. 제공된 샘플 데이터에서 "값" 열은 여러 번 이동됩니다. 목표는 이 값이 변경된 행만 식별하고 선택하는 것입니다.

해결책:

ROW_NUMBER 분할 사용:

이 기술은 SQL Server의 ROW_NUMBER 함수를 활용하여 고유한 행에 일련 번호를 할당합니다. "시간" 순서로 정렬된 "값" 파티션. 다음 쿼리는 이 개념을 적용합니다.

WITH x AS
(
  SELECT value, time, rn = ROW_NUMBER() OVER 
  (PARTITION BY Value ORDER BY Time)
  FROM dbo.table
)
SELECT * FROM x WHERE rn = 1;

"rn" 값이 1인 행을 선택하면 시퀀스에서 처음으로 나타나는 다른 "값"을 표시하는 행을 효과적으로 격리할 수 있습니다.

동적 값에 대한 대안적이고 느린 접근 방식:

"값" 열이 허용하는 경우 오름차순 및 내림차순 변경 모두에서 다음 쿼리는 느리지만 포괄적인 솔루션을 제공합니다.

DECLARE @x TABLE(value INT, [time] DATETIME)

INSERT @x VALUES
(0,'20120615 8:03:43 PM'),--
(1,'20120615 8:03:43 PM'),--*
(1,'20120615 8:03:48 PM'),--
(1,'20120615 8:03:53 PM'),--
(1,'20120615 8:03:58 PM'),--
(2,'20120615 8:04:03 PM'),--*
(2,'20120615 8:04:08 PM'),--
(3,'20120615 8:04:13 PM'),--*
(3,'20120615 8:04:18 PM'),--
(3,'20120615 8:04:23 PM'),--
(2,'20120615 8:04:28 PM'),--*
(2,'20120615 8:04:33 PM');

;WITH x AS
(
  SELECT *, rn = ROW_NUMBER() OVER (ORDER BY time)
  FROM @x
)
SELECT x.value, x.[time]
FROM x LEFT OUTER JOIN x AS y
ON x.rn = y.rn + 1
AND x.value <> y.value
WHERE y.value IS NOT NULL;

이 쿼리는 일련의 JOIN 및 필터를 사용하여 값 변경을 식별하고 "값"이 있는 시간 목록을 생성합니다. 변경되었습니다.

위 내용은 SQL Server에서 열 값이 변경되는 행을 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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