케이스가있는 조건부 업로드

Reznor13

이전 시스템에서 데이터를 마이그레이션 한 후 날짜가없는 레코드가있는 상황을 발견했습니다.

예 : 1

예 .2

위에서 제시 한 예는 제가 가진 상황입니다. 그 NULL에서 데이터를 가져올 곳이 없습니다. 따라서 논리적으로 설정되는 것은 다음과 같습니다.

  1. 해당 범위 (00013 또는 00021) 내에서 마이너 날짜를 가져옵니다.
  2. 시리즈의 가장 빠른 날짜로 레코드를 업데이트합니다.

이것을 달성하기 위해 CASE를 작성한다고 가정합니다. 누군가가 그것을 얻는 방법을 알아내는 데 도움을 줄 수 있습니까?

Billinkc

이 작업을 수행하는 방법을 보여주기 위해 작은 POC를 설정했습니다.

CREATE TABLE
    #T
(
    c1 char(9) NOT NULL
,   c2 datetime NULL
);

INSERT INTO
    #T
(
    c1
,   c2
)
VALUES
    ('0011.001', '2008-12-16T00:00:00.000')
,   ('0013.000', NULL)
,   ('0013.001', '2008-07-10T00:00:00.000')
,   ('0013.002', NULL)
,   ('9999.000', '2009-07-03T00:00:00.000');

이 시점에서 3 개의 고유 한 "밴드"가있는 테이블이 있습니다.이 테이블은 해당 열에서 선행 4 자라고 부르는 것입니다. 숫자는 앞에 0이 없기 때문에 숫자가 아닙니다. 그것은 표현의 인공물입니다.

-- Identify the minimum value per first 4 digit values
SELECT
    LEFT(T.c1, 4) AS Band
,   MIN(T.c2) AS MinDate
FROM
    #T AS T
GROUP BY
    LEFT(T.c1, 4)

해당 쿼리를 실행하면 다음과 같은 결과가 제공됩니다.

Band    MinDate
0011    2008-12-16 00:00:00.000
0013    2008-07-10 00:00:00.000
9999    2009-07-03 00:00:00.000

그게 제가 기대하는 것입니다. 이제이 값을 사용하여 누락 된 날짜를 채우기 만하면됩니다.

-- Use this query to backfill data
-- the join condition here makes things painful for large data sets


UPDATE
    T
SET
    T.c2 = D.MinDate
FROM
    #T AS T
    -- use the above query as a derived table
    INNER JOIN
    (
        -- Identify the minimum value per first 4 digit values
        SELECT
            LEFT(T.c1, 4) AS Band
        ,   MIN(T.c2) AS MinDate
        FROM
            #T AS T
        GROUP BY
            LEFT(T.c1, 4)
    ) D
    ON D.Band = LEFT(T.c1, 4)
WHERE
    T.c2 IS NULL;

물론 SQL Server 2005+ (요즘 일 가능성이 높음)를 사용하는 경우 창을 사용하여 조인을 사용하지 않을 수 있습니다 MIN().

UPDATE
    T
SET
    T.c2 = T.MinDate
FROM
    (
        SELECT
            T.c2
        ,   MIN(T.c2) OVER (PARTITION BY LEFT(T.c1, 4)) AS MinDate
        FROM
            #T AS T
    ) T
WHERE
    T.c2 IS NULL;

기본적으로 위의 방법은 c2값과 해당 최소값이 파생 된 테이블 (이 컨텍스트에서 업데이트 가능)로 사용되는 동일한 하위 쿼리에서 계산되고 반환 된다는 점을 제외하면 이전 솔루션과 동일하게 작동합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

조건부로 열 추가

분류에서Dev

조건부로 스프링 부팅 @EnableScheduling

분류에서Dev

조건부 데이터가있는 드롭 다운 목록

분류에서Dev

조건부로 파일을 디렉터리에 복사하는 빌드 작업

분류에서Dev

SQL Server에서 조건부로 하나의 레코드 만 업데이트

분류에서Dev

내부 선택이있는 케이스가있는 SQL 업데이트 문

분류에서Dev

Ant : 조건부로 리소스 추가

분류에서Dev

구조적으로 동일한 클래스가있는 TypeScript 조건부 유형

분류에서Dev

추가 조건부 Infile 문 작업

분류에서Dev

조건부 업데이트 MariaDB (MySQL)

분류에서Dev

벡터의 조건부 업데이트

분류에서Dev

JAX의 조건부 업데이트?

분류에서Dev

Python Pandas 조건부 업데이트

분류에서Dev

allownull 제약 조건을 조건부로 시퀀스 화

분류에서Dev

조건부 몽구스 쿼리 빌드

분류에서Dev

Xcode 릴리스 / Swift 조건부 코드

분류에서Dev

조건부 플롯이있는 반짝이는 대시 보드

분류에서Dev

조건부 컨텍스트로 Grep

분류에서Dev

조건부로 날짜 추가

분류에서Dev

지도에 조건부로 추가

분류에서Dev

thymeleaf로 조건부 속성 추가

분류에서Dev

조건부로 제한 추가

분류에서Dev

조건부로 행에 열 추가

분류에서Dev

조건부로 관찰 가능

분류에서Dev

조건부로 ProxyConnector 또는 HTTPConnector 사용

분류에서Dev

조건부 수동 승인 작업이있는 DevOps 템플릿

분류에서Dev

조건부로 다른 배열의 변수로 조건부로 배열 추가

분류에서Dev

SQL : 임시 테이블의 필드에 조건이있는 케이스 생성

분류에서Dev

파이썬 코드에 조건부로 변수 추가