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

如何改写SQL实现按GP、DATEDIFF组重复显示ACTIVE_MOS最大值?

需求说明

需要改写SQL语句,实现按GP和DATEDIFF分组后,组内每行重复显示ACTIVE_MOS的最大值,效果对应示例中的DESIRED RESULT列。

原SQL语句

LEAST(DENSE_RANK() OVER (PARTITION BY GP, DATEDIFF ORDER BY YRMO ASC), 12) AS ACTIVE_MOS

示例数据

GPYRMODATEDIFFACTIVE_MOSDESIRED RESULT
542020120112
542021010212
542021020312
542021030412
542021040512
542021050612
542021060712
542021070812
542021080912
5420210901012
5420211001112
5420211101212
5420211201212
5420220101212
5420220201212
5420220301212
5420220401212
5420220501212
5420220601212
5420220701212
5420220801212
5420220901212
5420221001212
5420221101212
54202310114
54202311124
54202312134
54202401144

解决方案

改写后的SQL语句

MAX(LEAST(DENSE_RANK() OVER (PARTITION BY GP, DATEDIFF ORDER BY YRMO ASC), 12)) OVER (PARTITION BY GP, DATEDIFF) AS DESIRED_RESULT

逻辑解释

  1. 保留原逻辑计算每行的ACTIVE_MOS值:通过DENSE_RANK()按GP、DATEDIFF分组排序,再用LEAST()限制最大值为12;
  2. 外层嵌套MAX()窗口函数,同样以GP和DATEDIFF为分组范围,直接取组内ACTIVE_MOS的最大值;
  3. 窗口函数会将这个最大值填充到组内的每一行,完全匹配需求中的结果列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:23:16