반응형
MariaDB - 다른 열 값에 따라 상수로 열 업데이트
테이블 이름을 내 테이블로 지정했는데 다음과 같이 생겼다고 가정해 보겠습니다.
나는 39에 추가된 p6 열의 모든 레코드를 업데이트할 수 있지만 p2 값이 다른 행에 대해서만 업데이트할 수 있기를 원합니다.즉, 결과 테이블은 다음과 같이 표시되어야 합니다.
회색인 모든 p2 셀이 동일한 값이기 때문에 이동하면 안 되는 위치를 나타내기 위해 p6 행을 노란색으로 칠했습니다.녹색 p6 행이 증가해야 합니다. p2도 증가하기 때문에 +39를 모든 행에 추가합니다.예제의 마지막 13번째 행은 12행의 p2 = 13행의 p2이기 때문에 다시 노란색입니다.
Gordon Linoff의 도움으로 저는 다음과 같은 일을 할 수 있었습니다.
update mytable join
(select mytable.*,
(lag(p6) over(ORDER BY dt) +
(case when lag(p2) over (order by dt) <> p2 then 39 ELSE 0 end)
) as new_p6
from mytable
) tt
on tt.id = mytable.id
set mytable.p6 = tt.new_p6
where new_p6 <> mytable.p6;
하지만 예상대로 업데이트가 되지 않습니다.제가 그것을 하는 것을 도와주실 수 있나요?
데이터로 업데이트:
id dt p2 p6
3 11.2.2021 15:45 536107.56 0
4 11.2.2021 15:50 536107.56 0
5 11.2.2021 15:55 536107.56 0
6 11.2.2021 16:00 536107.56 0
7 11.2.2021 16:05 536107.56 0
8 11.2.2021 16:10 609103.75 39
9 11.2.2021 16:15 609129.81 78
10 11.2.2021 16:20 609155.94 117
11 11.2.2021 16:25 609181.81 156
12 11.2.2021 16:30 609208.06 195
13 11.2.2021 16:35 609208.06 195
변경 사항을 열거하고 39를 곱하려면 다소 다른 논리를 사용해야 합니다.
update mytable join
(select tt.*,
sum(case when p2 <> prev_p2 then 1 else 0 end) over (order by dt) as cnt
from (select tt.*,
lag(p2) over (order by dt) as prev_p2
from mytable tt
) tt
) tt
on tt.id = mytable.id
set mytable.p6 = cnt * 39
where cnt > 0;
언급URL : https://stackoverflow.com/questions/66547864/mariadb-update-column-with-constant-depending-on-another-column-values
반응형
'programing' 카테고리의 다른 글
re.split("()+")로 문자열을 분할할 때 결과 목록에 공백이 하나 있습니다. 더 나은 방법이 있습니까? (0) | 2023.06.06 |
---|---|
스왑 공간과 관련된 링커 성능? (0) | 2023.06.06 |
vb.net 에서 에 대한 차단/종료 중첩 (0) | 2023.06.06 |
형식을 사용하여 문자열을 작성하는 방법 (0) | 2023.04.22 |
시퀀스에 둘 이상의 요소가 포함되어 있습니다. (0) | 2023.04.22 |