You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何按示例规则查询并设置Row_Number字段?

解决同一项目下按年份分组生成连续序号的问题

嘿,我完全get到你的需求了——同一ProjectID分组里,相同RevisionYear的记录要对应同一个序号,年份递增时序号也跟着依次递增对吧?其实你要的不是ROW_NUMBER()函数,而是**DENSE_RANK()**,它完美适配这种“同值同序号、无跳号递增”的场景。

实现代码示例

直接用窗口函数就能搞定,SQL代码如下:

SELECT
    ProjectID,
    RevisionYear,
    DENSE_RANK() OVER (PARTITION BY ProjectID ORDER BY RevisionYear) AS Row_Number
FROM
    YourTable; -- 把这里换成你的实际表名

代码解释

  • PARTITION BY ProjectID:按项目ID拆分数据,每个项目单独计算序号,不会和其他项目的序号混在一起
  • ORDER BY RevisionYear:按年份升序排序,确保更早的年份对应更小的序号
  • DENSE_RANK():和ROW_NUMBER()的核心区别是,它会给同一分组内相同RevisionYear的所有记录分配同一个序号,而且序号是连续递增的(不会因为有重复值就跳号)

验证结果

用你给出的测试数据跑这个SQL,输出结果正好是你想要的:

ProjectIDRevisionYearRow_Number
120161
120172
120172
220191
220191
220202

如果你的数据库是MySQL 8.0+、SQL Server、PostgreSQL、Oracle这些主流版本,都原生支持DENSE_RANK()窗口函数,直接用就行~

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

火山引擎 最新活动