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

按年月的时间顺序为表行分配编号

按年月的时间顺序为表行分配编号

嘿,我完全get到你的需求了——就是要让相同年月的所有行共享同一个编号,而且这个编号得按时间先后顺序递增,普通的索引列肯定满足不了,毕竟它是逐行加1,不管内容重复与否。下面给你分几种常用场景说解法:

如果你用的是SQL数据库

这时候窗口函数DENSE_RANK()绝对是你的救星!它能给每组相同的年月分配连续的唯一编号,关键是要先把你的Month/Year字符串转换成可正确排序的日期格式(避免英文名月份排序出错)。

举个MySQL的例子,假设你的表叫calendar_table:

SELECT 
    `Month/Year`,
    DENSE_RANK() OVER (ORDER BY STR_TO_DATE(CONCAT('01 ', `Month/Year`), '%d %b/%Y')) AS `Count`
FROM calendar_table;

不同数据库的日期转换函数略有不同:

  • SQL Server可以用CONVERT(DATE, '01 ' + [Month/Year], 106)
  • PostgreSQL用TO_DATE('01 ' || "Month/Year", 'DD Mon/YYYY')

DENSE_RANK()会按日期的先后顺序,给每个不同的年月分配从1开始的连续编号,同一个年月的所有行都会拿到同一个编号,完美符合你的要求。

如果你用Excel/Power Query

Excel公式解法

假设你的Month/Year数据在A列(从A2开始),在B2单元格输入这个公式,然后下拉填充:

=SUMPRODUCT(1/COUNTIF(A$2:A2,A$2:A2))

这个公式的原理是统计到当前行为止,出现过的唯一年月数量,自然就是按顺序递增的编号,相同年月的行结果完全一致。

Power Query解法

  1. 先把Month/Year列转换成日期类型(右键列 → 更改类型 → 日期,或者用自定义转换把字符串转成日期)
  2. 点击「开始」选项卡 → 「分组依据」,分组列选Month/Year,新列名设为Count,操作选「所有行」
  3. 给分组后的表添加一个索引列(从1开始)
  4. 展开「所有行」列,把索引列对应到每一行,最后删掉多余的列就行

这样处理后,相同年月的行就都会带上对应的连续编号啦~

备注:内容来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:24:50