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

如何在Redshift中按日期生成统一分组的rownum?现有SQL出错

修正SQL以实现按日期生成连续统一的序号

嘿,我明白你的需求了——你想要给相同日期的行分配同一个rownum,并且随着日期递增,这个序号也连续上升。但你当前用row_number()加partition by的写法,会让每个日期分组内的序号从1重新开始,所以才会出现所有同日期行的rownum都是1的情况。

要实现预期效果,你需要换用dense_rank()窗口函数,它会根据日期的顺序,给相同日期的行分配相同的排名,而且排名是连续递增的:

select salesid,
       TO_DATE(created_at,'YYYY-MM-DD') as date,
       dense_rank() over(order by TO_DATE(created_at,'YYYY-MM-DD')) as rownum
from <tablename>
order by date;

为什么这个写法能解决问题:

  • 去掉了partition by子句,dense_rank()会基于整个结果集,按日期排序后分配排名
  • 相同的日期值会得到完全相同的排名序号,日期递增时排名也会连续增加(比如2018-01-02对应1,2018-01-03对应2,以此类推),完美匹配你给出的示例结果。

如果你好奇,这里也可以用rank()替代dense_rank(),在你的场景下两者结果一致;但dense_rank()更贴合“连续递增”的需求,因为它不会因为日期存在间隔(比如示例中没有2018-01-04)而产生排名间隙。

执行修正后的SQL,你会得到和预期完全一致的结果:

salesid | date       | rownum
--------+------------+-------
10001   | 2018-01-02 | 1
10006   | 2018-01-02 | 1
10005   | 2018-01-02 | 1
20001   | 2018-01-03 | 2
20002   | 2018-01-03 | 2
30001   | 2018-01-05 | 3
30003   | 2018-01-05 | 3
30004   | 2018-01-05 | 3
30007   | 2018-01-05 | 3
40005   | 2018-01-10 | 4
40001   | 2018-01-10 | 4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:57