You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ROW_NUMBER()查询结果更新到数据表COUNTER列

实现方法

你已经创建好COUNTER列的前提下,可以直接通过可更新CTE或者关联子查询的方式把窗口函数计算出的行号写入列中,不需要额外导出导入数据。

支持可更新CTE的数据库(MySQL 8.0+、SQL Server、PostgreSQL)

直接运行以下语句即可完成更新:

WITH row_rank AS (
    SELECT
        COUNTER,
        ROW_NUMBER() OVER (PARTITION BY cons_id ORDER BY cons_id) AS calc_row_num
    FROM fy23_jul_aug_anniv_jv
)
UPDATE row_rank
SET COUNTER = calc_row_num;

通用兼容写法(适配Oracle、低版本MySQL等不支持可更新CTE的场景)

需要通过表的唯一标识(主键/唯一键,若无主键可用cons_id, credited_date组合做唯一匹配)关联更新:

UPDATE fy23_jul_aug_anniv_jv t
JOIN (
    SELECT
        -- 请将id替换为你表中实际的主键字段名
        id,
        ROW_NUMBER() OVER (PARTITION BY cons_id ORDER BY cons_id) AS calc_row_num
    FROM fy23_jul_aug_anniv_jv
) r ON t.id = r.id
SET t.COUNTER = r.calc_row_num;
注意点
  • 你当前窗口函数的排序逻辑存在缺陷:PARTITION BY cons_id后又用cons_id做排序,同一分组内所有行的排序值完全相同,最终生成的行号顺序是随机不稳定的。如果需要按入账日期排序编号,请将排序子句修改为ORDER BY credited_date
  • 关联更新时必须确保关联条件能唯一匹配到单行,否则会出现数据更新错误
  • 你原查询的输出参考如下:
    查询结果示例

内容的提问来源于stack exchange,提问作者jlvolsch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:33:17