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

如何在SQL中为相同JOB_ID和APPLICANT_ID生成连续计数?

如何按JOB_ID和APPLICANT_ID分组生成连续计数字段

我有如下结构的原始数据表:

JOB_IDAPPLICANT_IDDATESTATUS
1A01/01/2020Stage 1
1A01/01/2020Accepted
2A01/01/2020Rejected
1B02/01/2020Stage 1
1B02/02/2020Stage 2
1B02/03/2020Accepted

我希望新增一个COUNT字段,对相同JOB_ID和APPLICANT_ID的行按顺序生成连续计数,得到如下结果:

JOB_IDAPPLICANT_IDDATESTATUSCOUNT
1A01/01/2020Stage 11
1A01/02/2020Accepted2
2A01/01/2020Rejected1
1B02/01/2020Stage 11
1B02/02/2020Stage 22
1B02/03/2020Accepted3

我尝试了COUNT(DISTINCT(JOB_ID, APPLICANT_ID)),但没有达到预期效果,需要正确的SQL实现方法。


正确的SQL实现方法

你需要使用窗口函数ROW_NUMBER(),它能在指定分组内按顺序生成连续序号,语法如下:

SELECT 
    JOB_ID,
    APPLICANT_ID,
    DATE,
    STATUS,
    ROW_NUMBER() OVER (
        PARTITION BY JOB_ID, APPLICANT_ID 
        ORDER BY DATE ASC
    ) AS COUNT
FROM 
    your_table_name;

关键参数说明:

  • PARTITION BY JOB_ID, APPLICANT_ID:将数据按JOB_ID和APPLICANT_ID分组,每组单独计算序号。
  • ORDER BY DATE ASC:确保每组内的行按日期升序排列,保证序号与时间顺序匹配。
  • ROW_NUMBER():在每个分组内从1开始生成连续整数,完全符合需求的COUNT字段逻辑。

特殊场景处理:

如果你的数据库中DATE字段是字符串格式(如示例中的01/01/2020),需要先转换为标准日期类型再排序,避免排序错误。以MySQL为例:

SELECT 
    JOB_ID,
    APPLICANT_ID,
    DATE,
    STATUS,
    ROW_NUMBER() OVER (
        PARTITION BY JOB_ID, APPLICANT_ID 
        ORDER BY STR_TO_DATE(DATE, '%m/%d/%Y') ASC
    ) AS COUNT
FROM 
    your_table_name;

内容的提问来源于stack exchange,提问作者learning to code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:32:47