我有一个红移表,其中有要删除的重复行,
为此,我创建了文件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开始使用。

10-06 04:54
查看更多