У меня есть таблица Department_history и здесь подсчет записей для каждого отдела.запрос строки в Oracle 8i
select department_name, Id, count(1) total_rows_COUNT from Department_history
where
group by Department_history,id
order by 2 desc
результат:
department_name ID total_rows_COUNT
Accounting 4564 556
Finance 3434 671
Marketing 4353 234
IT 1233 454
Я хочу сохранить только 10 записей для каждого отдела в таблице.
Если вы используете этот ниже запрос для каждого отдела, как это, он работает.
delete from Department_history a1
where
and a1.report_runtime NOT IN
(
select report_runtime
from (
select a.*, rank() over (partition by department_name, id order by report_runtime desc) r
from Department_history a
) rs
where r <= 10 and department_name = 'Accounting'
)
and department_name = 'Accounting'
Но я не хочу отдельно запускать это удаление для каждого отдела. как я могу запустить один запрос, который удаляет данные для каждого имени отдела (если это> 10 записей). Я пытаюсь это сделать. но это не сработает.
delete from Department_history a1
where
and a1.report_runtime NOT IN
(
select report_runtime
from (
select a.*, rank() over (partition by department_name, id order by report_runtime desc) r
from Department_history a
) rs
where r <= 10
)
Может кто-нибудь посоветуете?
Ваш первый запрос выбирает 2 столбца, но ваш выход 3? В вашем втором запросе «Department_history =« Учет »- правильное условие? Я думал, что это имя вашей таблицы, а не имя столбца. Работает ли синтаксис 'where and '? Неужели 'id' не имеет уникальных значений в вашей таблице Department_history? Если это не уникально, то именовать его 'id' действительно путают. Означает ли это уникальное имя department_name? Если да, то почему вы разделяете оба? Столбец report_runtime с уникальными значениями? Может быть, первичный ключ? – trincot
В этом [скрипте SQL] (http://sqlfiddle.com/#!4/6643e/1) я помещал обобщенный оператор 'delete' на левой панели и' select' вправо, чтобы увидеть, удалил 3 записи, которые он должен удалить. Он работает правильно. Это Oracle 11g, поэтому, возможно, ваша проблема связана с Oracle 8i. Положите, пожалуйста, свою структуру таблицы (типы данных, первичный ключ, ...) – trincot
просто думая об идентификаторе в разделе ... вам это действительно нужно? если вы хотите сгруппировать по имени_дектора, это выглядит так, что вы можете удалить идентификатор ... поэтому он должен быть завершен (раздел по порядку по порядку по порядку по report_runtime desc) – are