我有一个红移表,其中有要删除的重复行,
为此,我创建了文件Id,并希望更新他以删除重复的行
我试图运行此查询,但它不起作用
update mr_usage
set id=row_number () over (partition by uid,date(ts),title order by ts)
我收到以下错误:
错误:无法在更新中使用窗口函数
我在找一种方法来更新这个字段
最佳答案
另一种可能的解决方案(不带CTE)是直接对子查询使用UPDATE .. FROM
语法
UPDATE mr_usage
SET id = sub.new_id
FROM (
SELECT
id, ROW_NUMBER() OVER (PARTITION BY uid, date(ts), title ORDER BY ts) AS new_id
FROM
mr_usage
) sub
WHERE id = sub.id
但它也可以从PostgreSQL 8.4开始使用。