변화하는 열 값으로 행 검색
문제:
당신은 특정 열 값의 변경 사항을 기반으로 하는 테이블입니다. 제공된 샘플 데이터에서 "값" 열은 여러 번 이동됩니다. 목표는 이 값이 변경된 행만 식별하고 선택하는 것입니다.
해결책:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!