제약 조건이 있는 그룹별 시퀀스 번호 추가
나는 있습니다Demo
테이블
CREATE TABLE `Demo` (
`id` int(11) NOT NULL,
`seq` int(11) NOT NULL,
`old_status` int(11) NOT NULL,
`new_status` int(11) NOT NULL
)
그리고 데모 데이터
INSERT INTO `Demo` (`id`, `seq`, `old_status`, `new_status`) VALUES
(1, 1, 1, 2),
(1, 2, 2, 3),
(1, 3, 3, 9),
(1, 4, 9, 2),
(1, 5, 2, 3),
(2, 1, 1, 2),
(2, 2, 2, 3);
Demo
테이블 모양
이드 | seq | 오래된 상태 | new_status |
---|---|---|---|
1 | 1 | 1 | 2 |
1 | 2 | 2 | 3 |
1 | 3 | 3 | 9 |
1 | 4 | 9 | 2 |
1 | 5 | 2 | 3 |
2 | 1 | 1 | 2 |
2 | 2 | 2 | 3 |
만약 우리가 충족한다면, 나는 그룹별로 버전을 유지하는 열을 추가하고 싶습니다.new_status
9 그런 다음 각 그룹별로 이전 값을 하나씩 늘립니다.id
예상 결과:
이드 | seq | 오래된 상태 | new_status | _버전 |
---|---|---|---|---|
1 | 1 | 1 | 2 | 1 |
1 | 2 | 2 | 3 | 1 |
1 | 3 | 3 | 9 | 2 |
1 | 4 | 9 | 2 | 2 |
1 | 5 | 2 | 3 | 2 |
2 | 1 | 1 | 2 | 1 |
2 | 2 | 2 | 3 | 1 |
사용하려고 했습니다.LAG
내 결과를 얻을 수 있는 기능을 하지만 뭔가 잘못됐어요!
SELECT id, old_status, new_status,
case
when new_status <> 9 then Lag(_version, 1) Over(PARTITION by id ORDER by seq)
else Lag(_version, 1) Over(PARTITION by id ORDER by seq) + 1
end _version
from
(select id, old_status, new_status, 1 as _version, seq
from Demo
order by id, seq) result
계산 방법_version
직접 존재하는_version
열 또는 다른 접근 방식이 있는지 확인합니다.
계산된 열에서 이 작업을 수행할 수는 없을 것 같습니다. 하지만 사용할 수는 있습니다.SUM()
여기서 분석 함수로서:
SELECT *, SUM(new_status = 9) OVER (PARTITION BY id ORDER BY seq) + 1 AS _version
FROM Demo
ORDER BY id, seq;
언급URL : https://stackoverflow.com/questions/71581510/add-sequence-number-by-group-with-constraint
'programing' 카테고리의 다른 글
내 Git repo가 분리된 HEAD 상태에 들어간 이유는 무엇입니까? (0) | 2023.06.13 |
---|---|
정의되지 않은 함수 convert_to_screen() 호출 (0) | 2023.06.13 |
생성자가 없는 클래스를 사용하는 유형 스크립트 (0) | 2023.06.13 |
Oracle의 JDBC 쿼리 시간 초과는 어떻게 구현됩니까? (0) | 2023.06.13 |
Visual Studio 2015에서 Typings.json for Typescript에 타이핑을 추가하려면 어떻게 해야 합니까? (0) | 2023.06.13 |