Как изменить этот запрос так, чтобы он удалял две последние записи о температуре для каждого города, а не только выводил их? Вот сам запрос: DELETE FROM cities WHERE (date, city, temperature) IN ( SELECT date, city, temperature FROM ( SELECT *, row_number() OVER (PARTITION BY city ORDER BY date DESC) as r FROM cities ) WHERE r = 1 or r = 2 )
Чтобы удалить строки после их фильтрации и сортировки, можно использовать операцию DELETE с подзапросом. В данном случае подзапрос должен выбрать две последние записи о температуре для каждого города, а затем их удалить из таблицы cities. Вот измененный запрос, который удаляет две последние записи о температуре для каждого города: DELETE FROM cities WHERE (date, city, temperature) IN ( SELECT date, city, temperature FROM ( SELECT *, row_number() OVER (PARTITION BY city ORDER BY date DESC) as r FROM cities ) WHERE r = 1 or r = 2 )
В однотабличном запросе существует простой способ удалить строки, которые выбирает оператор SELECT. Для этого необходимо заменить ключевое слово SELECT на DELETE и указать имя таблицы в FROM. Если в таблице есть первичный ключ из одного поля, можно использовать подзапрос для ANY и выбрать нужный первичный ключ. Если же у таблицы нет простого первичного ключа, можно воспользоваться подзапросом для EXISTS. Условие WHERE следует переместить в подзапрос, а первую строчку заменить на DELETE.