Это будет очень длинный запрос.Вам нужно для каждого system_id, имеющего более 5 записей, вы хотите удалить запись с рейтингом меньше 3.
Я собираюсь разделить запросы и использовать имена для них в конце.
1_ rating_query: аббревиатура RQ
В mysql нет rownum или чего-то подобного, надеюсь, что этот запрос вернет записи, ранжированные от ghe от первого до последнего.
SELECT
@rank := @rank + 1 as rank,
id,
system_id,
value
FROM table_name, (select @rank:=0) as rt
order by system_id, value desc
это будет ранжировать каждую запись в вашей таблице, и главное преимущество заключается в том, что запись с одинаковым system_id будет следовать друг за другом в порядке убывания
system_id value rank
1. 10. 1
1. 9. 2
1. 7. 3
1. 5. 4
1. 3. 5
1. 2. 6
2. 12. 7
2. 10. 8
3. 11. 9
........
......
3. 1. 15
В этом примере для system_id1 нам нужно сохранить только три первых (1,2,3) записи одинаково для system_id 3 (9,10,11)
2_ filter_query.Abriviation: FQ. Поскольку вы хотите удалить на основе счетчика 5, нам нужен этот дополнительный запрос
SELECT
system_id
FROM table_name
GROUP BY system_id
having count(*) > 5
результат:
system_id
1
3
4_ third_quervrivion: RQD
aзапрос, чтобы узнать, с какого ранга мы должны начать, действительно удаляем для каждого system_id в mysql, нам нужно переписать первый запрос снова, но здесь я собираюсь использовать Abriviation, чтобы сохранить ответ коротким.
SELECT
system_id,
min_rank + 3 from_rank
FROM (
SELECT
RQ2.system_id,
min(RQ2.rank) as min_rank
FROM (rank_query) RQ2
GROUP BY system_id) RS
, поэтому для того же примера мы получим этот результат
system_id. from_rank
1. 4
2. 9 -- this record will be removed by the filter_query
3. 12
FINAL QUERY:
, поэтому нам нужно удалить запись, которая существует в запросе фильтраи рейтинг больше, чем from_rank.
DELETE FROM table_name WHERE
id in (
SELECT
RQ.id
FROM
rank_query RQ INNER JOIN filter_query FQ ON rq.system_id = FQ.system_id
INNER JOIN third_query RQD ON RQ.rank >= RQD.from_rank)
Я надеюсь, что эта идея сработает, извините за любую синтаксическую ошибку, я использовал свой телефон, чтобы ответить мне нравится этот тип запроса