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

如何按条件统计历史行:排除AM/PM维度实现分组计数

解决同一ID下按日期累计计数(排除时段维度)的SQL方案

你的核心需求是给每个ID下的不同日期分配连续的累计计数,同一日期的AM/PM行共享同一个计数,原用row_number()的问题在于它会给同一日期的不同行分配不同序号,不符合要求。这里提供两种可行的SQL方案:

方案一:直接使用DENSE_RANK函数

这是最简洁的方法,利用DENSE_RANK()的特性——同一分组内相同排序值的行会得到相同的序号,且序号连续递增:

SELECT 
    ID,
    "Time of day",
    Date,
    DENSE_RANK() OVER (PARTITION BY ID ORDER BY Date) AS "Count"
FROM 
    your_table;

直接在原表上计算,无需额外子查询,就能让同一ID同一日期的所有行共享相同的累计计数,完全匹配你的期望结果。

方案二:先聚合日期再关联原表

如果你的SQL环境对窗口函数支持有限,或者更倾向于分步逻辑,可以先提取每个ID的唯一日期并生成计数,再关联回原表:

WITH date_rank_cte AS (
    SELECT 
        ID,
        Date,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date) AS "Count"
    FROM 
        your_table
    GROUP BY 
        ID, Date -- 去重得到每个ID的唯一日期
)
SELECT 
    t.ID,
    t."Time of day",
    t.Date,
    drc."Count"
FROM 
    your_table t
INNER JOIN 
    date_rank_cte drc ON t.ID = drc.ID AND t.Date = drc.Date;

这个方法先通过分组得到每个ID的日期列表,用ROW_NUMBER()给日期分配递增序号,再通过ID和日期关联,把序号同步到原表的每一行。

两种方案都能实现你要的效果,可根据自己的SQL环境和习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:55:31