Оставьте N первых строк и удалите остальные
Пытаясь написать sql, который будет хранить первые N строк таблицы и удалять остальные. У меня есть с этим sql, но я не могу использовать счет здесь. Пожалуйста, помогите мне переписать sql.
DELETE
FROM ZZ_TEST_FINTABLE
WHERE PROCESS_INSTANCE = (
SELECT MIN(B.PROCESS_INSTANCE)
FROM ZZ_TEST_FINTABLE B)
AND COUNT(PROCESS_INTANCE) > 9
3 ответа
Решение
Может быть, это работает для вас (с БД Oracle)
DELETE FROM
ZZ_TEST_FINTABLE
WHERE
PROCESS_INSTANCE NOT IN
(
SELECT PROCESS_INSTANCE
FROM ZZ_TEST_FINTABLE
WHERE ROWNUM < 9
);
Вам придется изменить это для вашей таблицы, но должно работать:
DELETE FROM myschema.mytable WHERE pkey NOT IN (SELECT pkey FROM myschema.mytable ORDER BY pkey FETCH FIRST 10 ROWS ONLY)
Вы должны использовать HAVING вместо AND.
DELETE
FROM ZZ_TEST_FINTABLE
WHERE PROCESS_INSTANCE = (
SELECT MIN(B.PROCESS_INSTANCE)
FROM ZZ_TEST_FINTABLE B
)
HAVING COUNT(PROCESS_INTANCE) > 9
или это
DELETE
FROM ZZ_TEST_FINTABLE A
INNER JOIN ZZ_TEST_FINTABLE B ON A.PROCESS_INSTANCE= MIN(B.PROCESS_INSTANCE)
HAVING COUNT(PROCESS_INTANCE) > 9