You need to enable JavaScript to run this app. Presto窗口函数实现各分区内name与username去重查询
优惠活动
大模型
产品
解决方案
定价
更多

Presto窗口函数实现各分区内name与username去重查询

Presto 去重查询调整方案

根因说明

你当前的窗口函数仅以name作为分区维度排序生成序号,没有对同一分区内重复出现的username做去重处理,导致同一用户会在同一个name分组下被多次计数,无法满足「name与username组合完全唯一」的要求。

具体调整逻辑

需要通过两层窗口函数实现目标:

  • 第一层去重:以name + username作为组合分区,按datetime升序排序,仅保留每个组合下最早出现的1条记录,彻底过滤掉同一分组下重复出现的用户行。
  • 第二层重排序:对已经完成去重的数据集,重新按name分区、datetime升序生成连续的top_user序号,最后保留每个分组下序号小于6的行,匹配你原本取每组前5个用户的需求。

可直接运行的调整后SQL

SELECT * FROM 
(
  -- 第二层:对去重后的数据集重新生成连续的top_user序号
  SELECT 
    *,
    ROW_NUMBER() OVER (PARTITION BY name ORDER BY datetime ASC) AS top_user
  FROM 
  (
    -- 第一层:对name+username组合做内部分区,标记重复行
    SELECT 
      name, username, datetime, message, Count, Date, Price, Percent, Volume,
      ROW_NUMBER() OVER (PARTITION BY name, username ORDER BY datetime ASC) AS user_rn
    FROM table_name 
  ) dedup_base
  WHERE user_rn = 1 -- 剔除同一name分组下重复的username行
) ranked_result
WHERE top_user < 6
ORDER BY name, top_user

效果匹配说明

  • 重复行过滤效果:原输出中ENZC分组下重复的OtcRock、LTNC分组下重复的OneTickMoline、OZSC分组下重复的JZavitka/S_AnglinIV、SANP分组下重复的Fluffypillows9,都会被第一层过滤逻辑剔除,每个分组内不存在name、username完全相同的重复行。
  • 序号匹配效果:第二层生成的top_user为连续无跳号的正整数,和你提供的期望输出中的序号规则完全一致。

内容的提问来源于stack exchange,提问作者A l w a y s S u n n y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 05:54:07