반응형
하나의 명령으로 모든 행을 위로 이동할 수 있는 Mariaadb UPDATE 테이블?
MariaDB에서 나는 다음 표를 가지고 있습니다.
OHCL
|------
|Column|Type|Null|Default
|------
|//**id**//|int(3)|No|
|index_minus|int(10)|No|0
|timestamp|int(11)|Yes|NULL
|year|int(4)|Yes|NULL
|month|int(2)|Yes|NULL
|day|int(2)|Yes|NULL
|hour|int(2)|Yes|NULL
|minute|int(2)|Yes|NULL
|close|float|Yes|NULL
|MFA_short|float|Yes|NULL
|MFA_long|float|Yes|NULL
|volume|float|Yes|NULL
|count|int(10)|Yes|NULL
== Dumping data for table OHCL
|1|0|1619743800|2021|4|30|2|50|0.3036|NULL|NULL|97852.6|41
|2|1|1619744100|2021|4|30|2|55|0.30358|NULL|NULL|221278|45
|3|2|1619744400|2021|4|30|3|0|0.303548|NULL|NULL|41685|30
|4|3|1619744700|2021|4|30|3|5|0.304009|NULL|NULL|158091|23
"시프트"(또는 이동)해야 합니다.어떤 용어가 이를 가장 잘 설명하는지 확실하지 않음)을 제외한 각 행id
그리고.index_minus
1만큼 위로 올라가므로 ID가 = 1인 행을 버립니다. 720 행은 기본값으로 채워야 합니다.마지막 행의 기본값은 그다지 중요하지 않습니다.다음 단계에서 이 행을 새로운 데이터로 업데이트하겠습니다.이것이 가능하다면 기본값을 사용하는 것이 방법이 될 것이라고 생각했습니다.
결과는 다음과 같습니다.
|1|0|1619744100|2021|4|30|2|55|0.30358|NULL|NULL|221278|45
|2|1|1619744400|2021|4|30|3|0|0.303548|NULL|NULL|41685|30
|3|2|1619744700|2021|4|30|3|5|0.304009|NULL|NULL|158091|23
|4|3|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL
지금 잠깐 시도해봤는데 이게 가능한지도 모르겠어요?
테스트를 위해 단 하나의 열만 이동하려고 했을 때, 가장 근접한 것은 다음과 같은 것이었습니다.UPDATE OHCL SET minute = LEAD(minute) OVER (ORDER BY id) AS minute
하지만 그것은 효과가 없었습니다.
저는 SQL이 처음입니다.한 번의 명령으로도 가능한가요?
사용하다LAG()
이전 버전을 가져오는 창 기능id
각 행에 대해 테이블에 가입하여 행을 업데이트합니다.
UPDATE OHCL o
LEFT JOIN (
SELECT *, LAG(id) OVER (ORDER BY id) prev_id
FROM OHCL
) t ON t.prev_id = o.id
SET o.timestamp = t.timestamp,
o.year = t.year,
o.month = t.month,
o.day = t.day,
o.hour = t.hour,
o.minute = t.minute,
o.close = t.close,
o.MFA_short = t.MFA_short,
o.MFA_long = t.MFA_long,
o.volume = t.volume,
o.count = t.count;
데모 보기.
사이에 틈이 없는 경우id
셀프 가입을 통해 더욱 간편해집니다.
UPDATE OHCL o1
LEFT JOIN OHCL o2
ON o2.id = o1.id + 1
SET o1.timestamp = o2.timestamp,
o1.year = o2.year,
o1.month = o2.month,
o1.day = o2.day,
o1.hour = o2.hour,
o1.minute = o2.minute,
o1.close = o2.close,
o1.MFA_short = o2.MFA_short,
o1.MFA_long = o2.MFA_long,
o1.volume = o2.volume,
o1.count = o2.count;
데모 보기.
언급URL : https://stackoverflow.com/questions/67358160/mariadb-update-table-to-move-all-rows-up-with-one-command-possible
반응형
'programing' 카테고리의 다른 글
C++ 및 C의 헤더 가드 (0) | 2023.09.13 |
---|---|
팬더 데이터 프레임의 전체 열에 값 설정 (0) | 2023.09.13 |
플렉스 컨테이너의 높이 행이 같음 (0) | 2023.09.13 |
Ubuntu에서 코어 덤프 파일을 생성하는 방법 (0) | 2023.09.13 |
mariadb - select 문이 쿼리 시간이 부정확함을 나타냅니다. (0) | 2023.09.08 |