Получить id дубликатов кроме самого последнего
Нужно найти записи с полем entity_types_id, значение которого повторяется более 1 раза. Далее, нужно получить id этих строк, кроме самой последней по id
Таблица:
subtask_templates
, поля: id, entity_types_id, value
Написал запрос на поиск дубликатов:
SELECT entity_types_id FROM subtask_templates GROUP BY entity_types_id HAVING COUNT(*) > 1;
И запрос на получение всех id согласно найденным entity_types_id
SELECT id, entity_types_id
FROM subtask_templates
WHERE entity_types_id IN
(SELECT entity_types_id FROM subtask_templates WHERE enabled = TRUE GROUP BY entity_types_id HAVING COUNT(*) > 1)
ORDER BY id desc;
Но теперь не совсем понятно как убрать среди найденных записей записи с наибольшим id по каждому entity_types_id.
id | entity_types_id |
---|---|
106 | 200 |
104 | 200 |
63 | 200 |
34 | 99 |
32 | 99 |
9 | 99 |
3 | 99 |
В этой выборке нужно получить все строки, кроме id = 106 и id = 34
Ответы (1 шт):
Автор решения: desire
→ Ссылка
Можно добавить ещё один подзапрос. Например:
SELECT id, entity_types_id
FROM subtask_templates
WHERE entity_types_id IN
(SELECT entity_types_id FROM subtask_templates WHERE enabled = TRUE GROUP BY entity_types_id HAVING COUNT(*) > 1)
AND id NOT IN
(SELECT MAX(id) FROM subtask_templates GROUP BY entity_types_id)
ORDER BY id DESC;