Получить 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;
→ Ссылка