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

如何按日期递增为StudentId添加序号后缀并修正SQL错误?

解决方案

要实现同一StudentId下按dateEnrolled递增顺序分配连续序号、相同日期共享同序号的需求,你可以直接使用DENSE_RANK()窗口函数——它会为相同排序值的行分配相同的排名,且排名连续无间隔。

修正后的SQL代码

SELECT
    CONCAT(StudentId, '-', DENSE_RANK() OVER (PARTITION BY StudentId ORDER BY dateEnrolled)) AS StudentId,
    dateEnrolled
FROM table1;

原代码错误原因

你的原有代码存在两个关键问题:

  • 使用ROW_NUMBER()会给每一行(包括相同日期的重复行)分配唯一序号,无法实现相同日期共享序号的需求;
  • 子查询(Select min(number) from temp group by studentId)返回的是当前StudentId分组下的最小序号(固定为1),导致所有行都拼接了-1,完全忽略了日期的差异。

另一种实现方式(分步逻辑)

如果需要更清晰的分步逻辑,也可以先提取每个StudentId的唯一日期并分配序号,再关联回原表:

WITH date_ranks AS (
    SELECT
        StudentId,
        dateEnrolled,
        DENSE_RANK() OVER (PARTITION BY StudentId ORDER BY dateEnrolled) AS rank_num
    FROM (
        SELECT DISTINCT StudentId, dateEnrolled FROM table1
    ) AS distinct_dates
)
SELECT
    CONCAT(t.StudentId, '-', dr.rank_num) AS StudentId,
    t.dateEnrolled
FROM table1 t
JOIN date_ranks dr 
    ON t.StudentId = dr.StudentId 
    AND t.dateEnrolled = dr.dateEnrolled;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:15:34