programing

Maria에서 그룹 식별자를 변경하는 방법DB

starjava 2023. 8. 25. 23:11
반응형

Maria에서 그룹 식별자를 변경하는 방법DB

내 MariaDb에는 다음 표와 같은 표가 있으며 "그룹" 열을 만들어야 합니다(출력 참조).LOAD_DATE 순서대로 KEY_A와 KEY_B의 조합이 변경되면 그룹이 변경됩니다(출력 참조)."group" 열을 생성할 적절한 SQL을 찾을 수 없습니다.

마리아 DB에서 이 문제를 해결하는 방법을 알고 있는 사람이 있을 수도 있습니다.

테스트 데이터:

CREATE OR REPLACE TABLE test AS 
SELECT 'AAA' AS KEY_A,'A' AS KEY_B,DATE('2010-01-01') AS LOAD_DATE
UNION
SELECT 'AAA' AS KEY_A,'B' AS KEY_B,DATE('2010-01-02') 
UNION
SELECT 'AAA' AS KEY_A,'A' AS KEY_B,DATE('2010-01-03') 
UNION
SELECT 'AAA' AS KEY_A,'A' AS KEY_B,DATE('2010-01-04') 
UNION
SELECT 'BBB' AS KEY_A,'C' AS KEY_B,DATE('2010-01-04') 
UNION
SELECT 'CCC' AS KEY_A,'D' AS KEY_B,DATE('2010-01-04') ;

출력:

KEY_A; KEY_B; LOAD_DATE;  group

AAA;   A;     2010-01-01;  1
AAA;   B;     2010-01-02;  2
AAA;   A;     2010-01-03;  3
AAA;   A;     2010-01-04;  3
BBB;   C;     2010-01-04;  1
CCC;   D;     2010-01-04;  1

저는 이것이 격차와 섬의 문제라고 생각합니다.

창 기능으로 이 문제를 해결할 수 있습니다.

select t.*,
       sum( case when key_b = prev_key_b then 0 else 1 end ) over (partition by key_a order by load_date) as grp
from (select t.*,
             lag(key_b) over (partition by key_a order by load_data) as prev_key_b
      from t
     ) t;

검정 데이터가 실제로 잘못 작성되었습니다.

테스트 데이터:

CREATE TABLE TestDB.test AS 
SELECT 'AAA' AS KEY_A,'A' AS KEY_B, DATE('2010-01-01') AS LOAD_DATE FROM DUAL
UNION
SELECT 'AAA' AS KEY_A,'B' AS KEY_B, DATE('2010-01-02') AS LOAD_DATE FROM DUAL
UNION
SELECT 'AAA' AS KEY_A,'A' AS KEY_B, DATE('2010-01-03') AS LOAD_DATE FROM DUAL
UNION
SELECT 'AAA' AS KEY_A,'A' AS KEY_B, DATE('2010-01-04') AS LOAD_DATE FROM DUAL
UNION
SELECT 'BBB' AS KEY_A,'C' AS KEY_B, DATE('2010-01-04') AS LOAD_DATE FROM DUAL
UNION
SELECT 'CCC' AS KEY_A,'D' AS KEY_B, DATE('2010-01-04') AS LOAD_DATE FROM DUAL
;

언급URL : https://stackoverflow.com/questions/54697974/how-to-create-changing-group-identifier-in-mariadb

반응형