这样的SQL查询:
SELECT ROW_NUMBER() OVER (PARTITION BY ID, YEAR order by ID ), ID, YEAR
from table t
给我以下查询集:
1 1000415591 2012
1 1000415591 2013
2 1000415591 2013
1 1000415591 2014
2 1000415591 2014
如何更新 ROW_NUMBER() 等于 2 的记录?该记录的其他字段是相同的(selectdistinct from table where id = 1000415591
给出 3 条记录,当有 5 条没有 distinct
关键字时),所以我只能依赖 ROW_NUMBER( )值。
我需要 Oracle 的解决方案,因为我看到了 SQL-Server 的类似解决方案,但它不适用于 Oracle。
最佳答案
您可以使用非常冗长且易于理解的 MERGE 语句。
例如,
MERGE INTO t s
USING
(SELECT ROW_NUMBER() OVER (PARTITION BY ID, YEAR order by ID ) RN,
ID,
YEAR
FROM TABLE t
) u ON (s.id = u.id)
WHEN MATCHED THEN
UPDATE SET YEAR = some_value WHERE u.RN = 2)
/
注意您不能合并用于连接 ON 子句的同一列。
关于sql - 如何仅基于 ROW_NUMBER() 更新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30454010/