Я новичок в базах данных и postgres как таковых.У меня есть таблица с именем names, в которой есть 2 столбца name и value, которые обновляются каждые x секунд новыми парами «имя-значение».Мое требование - сохранять только 3 положительных и 3 отрицательных значения в любой момент времени и удалять остальные строки при каждом обновлении таблицы.Я использую следующий запрос, чтобы удалить старые строки и сохранить 3 положительных и 3 отрицательных значения, упорядоченные по значению.
delete from names
using (select *,
row_number() over (partition by value > 0, value < 0 order by value desc) as rn
from names ) w
where w.rn >=3
Я скептически отношусь к использованию условного подобного значения> 0 в операторе разбиения.Правильный ли этот подход?
Например,
Таблица, подобная этой до удаления:
name | value
--------------
test | 10
test1 | 11
test1 | 12
test1 | 13
test4 | -1
test4 | -2
Моя таблица после удаления должна выглядеть следующим образом:
name | value
--------------
test1 | 13
test1 | 12
test1 | 11
test4 | -1
test4 | -2