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

如何在Synapse中使用DENSE_RANK()添加递增排名列

解决方案:基于Title生成排序排名(Synapse环境)

核心逻辑

要实现按Title分组,同时依据EventNo和ProgramDate的顺序生成排名,需借助窗口函数RANK()或DENSE_RANK(),搭配PARTITION BY(分组)和ORDER BY(排序)子句:

  • PARTITION BY Title:将数据按节目标题拆分,每个标题单独计算排名
  • ORDER BY EventNo, ProgramDate:在每个标题分组内,按事件编号、节目日期的顺序确定排名先后

完整查询语句

根据你需要的排名规则,提供两种常用写法:

1. 连续排名(DENSE_RANK())

当分组内存在相同排序键时,排名不会跳过序号,始终连续递增:

SELECT 
    EventNo,
    ProgramDate,
    Title,
    -- 可添加其他需要查询的字段
    DENSE_RANK() OVER (PARTITION BY Title ORDER BY EventNo, ProgramDate) AS TitleRank
FROM [Prod].[Schedule]
ORDER BY EventNo, ProgramDate;

2. 非连续排名(RANK())

当分组内存在相同排序键时,相同数据会获得同一排名,后续排名会跳过对应序号:

SELECT 
    EventNo,
    ProgramDate,
    Title,
    -- 可添加其他需要查询的字段
    RANK() OVER (PARTITION BY Title ORDER BY EventNo, ProgramDate) AS TitleRank
FROM [Prod].[Schedule]
ORDER BY EventNo, ProgramDate;

示例验证

假设你的示例数据如下:

EventNoProgramDateTitle
12024-05-20新闻早报
22024-05-20财经速递
32024-05-20新闻早报
42024-05-20新闻早报
52024-05-20财经速递

使用DENSE_RANK()的输出结果:

EventNoProgramDateTitleTitleRank
12024-05-20新闻早报1
22024-05-20财经速递1
32024-05-20新闻早报2
42024-05-20新闻早报3
52024-05-20财经速递2

特殊场景适配

如果你的预期效果是全局按Title出现顺序排名(而非分组内排名),可去掉PARTITION BY Title,直接基于全局排序生成排名:

SELECT 
    EventNo,
    ProgramDate,
    Title,
    DENSE_RANK() OVER (ORDER BY Title, EventNo, ProgramDate) AS GlobalTitleRank
FROM [Prod].[Schedule]
ORDER BY EventNo, ProgramDate;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:05:32