속성 변경 내역이있는 테이블이 있습니다.
| id | attr | value | version |
|--------|----------|--------|---------|
| UUID-1 | name | chuck | 1 |
| UUID-1 | password | morris | 1 |
| UUID-1 | name | chack | 0 |
| UUID-2 | name | aron | 2 |
| UUID-2 | name | alan | 1 |
| UUID-2 | name | agor | 0 |
이제 모든 'id'에 대한 오래된 데이터를 삭제해야합니다 (MAX (버전)이있는 행은 그대로 유지되어야 함).
| id | attr | value | version |
|--------|----------|--------|---------|
| UUID-1 | name | chuck | 1 |
| UUID-1 | password | morris | 1 |
| UUID-2 | name | aron | 2 |
그래서 나는 이러한 구조로 이것을 얻을 수 있다고 결정했습니다.
DELETE
FROM
table1 pch
WHERE
EXISTS (
SELECT
id, MAX(version) AS maxVer
FROM
table1 pch2
WHERE
pch.id = pch2.id AND pch.version != maxVer
GROUP BY
id)
또는 이와 비슷한 것이지만 ... 오라클 SQL은 'where / having'절의 별칭과 함께 작동하지 않습니다.
이 일을 다른 방법으로 수행 할 수있는 옵션이 있습니까?
대신 상관 하위 쿼리를 사용하십시오 group by
.
DELETE FROM table1 pch
WHERE pch.version < (SELECT MAX(version) AS maxVer
FROM table1 pch2
WHERE pch.id = pch2.id
);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다