문제:
두 개의 열이 있는 테이블이 있다고 가정합니다. 시간. 값 열이 변경된 행을 식별하려고 합니다. 즉, 별표 표시된 행으로 표시된 저장된 값이 변경된 순간을 찾아야 합니다.
해결책:
이 문제를 해결하는 한 가지 접근 방식은 창을 활용하는 것입니다. SQL 문 내의 함수 및 행 번호:
행 소개 숫자:
WITH x AS ( SELECT value, time, rn = ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Time) FROM dbo.table )
이 단계에서는 시간의 오름차순으로 각 값 파티션 내의 각 행에 고유한 시퀀스 번호를 할당하는 rn(행 번호)이라는 새 열을 도입합니다.
식별 변경 사항:
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');
샘플 데이터로 임시 테이블을 만들어 process.
행 번호 소개(다시):
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;
이 쿼리는 행 번호와 자신의 이동된 버전(y)이 있는 테이블 간에 왼쪽 외부 조인을 수행하여 인접한 행 사이의 값 열의 변경 사항을 확인합니다. y.value에 대해 NULL이 아닌 값이 있는 행은 변경 사항을 나타냅니다.
위 내용은 SQL은 시간 경과에 따른 열 값의 변화를 어떻게 식별할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!