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

如何计算唯一ID的累计运行总数?SQL查询结果不符求助

问题原因分析
  • 无分组的count窗口函数逻辑错误
    你编写的select Id, count(Id) over (order by ID) as Running Total语句没有对ID进行去重,窗口计数统计的是从数据集开头到当前行的非空ID总行数,你的原始表数据量为10000多,自然最终计数会到10000+,和唯一ID数量无关。
  • 分组后SQL结果异常的排查点
    你的第一个SQL已经按ID分组,理论上每个唯一ID仅对应一行,窗口求和的最大值应该等于唯一ID数,若结果还是异常,可以先排查两个点:
    • 是否实际分组字段包含了ID之外的其他维度,导致同一个ID被拆分为多行
    • ID为字符串类型时,是否存在大小写、前后空格等差异,被数据库判定为不同ID
解决方案

方案1:输出每个唯一ID对应一行的结果

如果你需要每个唯一ID仅返回一条记录,同时携带该ID的累计序号,直接对去重后的ID列表用行号函数即可:

select 
    ID,
    min(date_time) as first_appear_time,
    -- 可按需求调整排序规则,比如按ID大小排序就换成order by ID
    row_number() over (order by min(date_time) asc, ID asc) as runningTotal_ID
from Table1
group by ID

方案2:在原始表每一行都携带累计唯一ID数

如果你需要保留原始表的所有行,同一ID的所有行显示相同的累计序号(代表该ID是第几个出现的唯一ID),用密集排名函数即可:

select 
    ID,
    date_time,
    -- 按ID本身大小排序统计累计唯一数
    dense_rank() over (order by ID) as runningTotal_ID
from Table1

如果需要按ID首次出现的时间排序统计累计数,调整排序逻辑即可:

select 
    ID,
    date_time,
    dense_rank() over (order by min(date_time) over (partition by ID), ID) as runningTotal_ID
from Table1

以上两种方案返回的runningTotal_ID最大值都会等于你表中实际的唯一ID数量200。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:15:00