>데이터 베이스 >MySQL 튜토리얼 >SQL은 시간 경과에 따른 열 값의 변화를 어떻게 식별할 수 있습니까?

SQL은 시간 경과에 따른 열 값의 변화를 어떻게 식별할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-21 18:54:09822검색

How Can SQL Identify Changes in Column Values Over Time?

SQL을 사용하여 열 값의 변경 사항 식별

문제:

두 개의 열이 있는 테이블이 있다고 가정합니다. 시간. 값 열이 변경된 행을 식별하려고 합니다. 즉, 별표 표시된 행으로 표시된 저장된 값이 변경된 순간을 찾아야 합니다.

해결책:

이 문제를 해결하는 한 가지 접근 방식은 창을 활용하는 것입니다. SQL 문 내의 함수 및 행 번호:

  1. 행 소개 숫자:

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

    이 단계에서는 시간의 오름차순으로 각 값 파티션 내의 각 행에 고유한 시퀀스 번호를 할당하는 rn(행 번호)이라는 새 열을 도입합니다.

  2. 식별 변경 사항:

    SELECT * FROM x WHERE rn = 1;

    이 쿼리는 rn이 1인 행만 포함하도록 결과를 필터링합니다. 이는 값 변경의 시작을 나타내는 각 값 파티션의 첫 번째 행입니다.

상하 추가 고려사항 값:

값 열이 증가하거나 감소할 수 있는 경우 더 복잡한 접근 방식이 필요합니다.

  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.

  2. 행 번호 소개(다시):

    WITH x AS (
        SELECT *, rn = ROW_NUMBER() OVER (ORDER BY time)
        FROM @x
    )
  3. 값 식별 변경 사항:

    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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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