使用 window 函数更新 table
Update table with window function
我在 Redshift 中 table 我想删除重复的行,
为此我创建了归档 ID,我想更新他以删除重复的行
我正在尝试 运行 这个查询,但它不起作用
update mr_usage
set id=row_number () over (partition by uid,date(ts),title order by ts)
我收到以下错误:
错误:无法在 UPDATE
中使用 window 函数
我正在寻找更新该字段的方法
您可以尝试 CTE 来实现这一点,尽管这样的更新不会删除任何重复的行。
WITH n AS (
SELECT
id AS current_id,
ROW_NUMBER() OVER (PARTITION BY uid, date(ts), title ORDER BY ts) AS new_id
FROM
mr_usage
)
UPDATE
mr_usage
SET
id = n.new_id
FROM
n
WHERE
mr_usage.id = n.current_id;
另一种可能的解决方案(没有 CTE)是直接使用带有子查询的 UPDATE .. FROM
语法
UPDATE mr_usage outer
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 outer.id = sub.id
但自 PostgreSQL 8.4 起也可用。
我在 Redshift 中 table 我想删除重复的行,
为此我创建了归档 ID,我想更新他以删除重复的行 我正在尝试 运行 这个查询,但它不起作用
update mr_usage
set id=row_number () over (partition by uid,date(ts),title order by ts)
我收到以下错误:
错误:无法在 UPDATE
中使用 window 函数我正在寻找更新该字段的方法
您可以尝试 CTE 来实现这一点,尽管这样的更新不会删除任何重复的行。
WITH n AS (
SELECT
id AS current_id,
ROW_NUMBER() OVER (PARTITION BY uid, date(ts), title ORDER BY ts) AS new_id
FROM
mr_usage
)
UPDATE
mr_usage
SET
id = n.new_id
FROM
n
WHERE
mr_usage.id = n.current_id;
另一种可能的解决方案(没有 CTE)是直接使用带有子查询的 UPDATE .. FROM
语法
UPDATE mr_usage outer
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 outer.id = sub.id
但自 PostgreSQL 8.4 起也可用。