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

BigQuery查询最高频值 频次并列时按日期取最新值去重

你原有逻辑的问题有两处:一是外层分组漏了date字段会触发SQL语法报错,二是ARRAY_AGG的排序规则没有配置频次打平后的兜底判断规则,才会出现同频次下结果重复的问题。

只需要调整排序规则,补全分组逻辑即可实现「优先取使用频次最高的语言,频次相同时取最新使用的语言」的需求。

按用户维度统计(和你最初的查询粒度一致)

如果不需要按日期拆分结果,仅需要给每个用户匹配唯一的最常用语言,用以下语句:

#standardSQL
SELECT
  User_ID,
  ARRAY_AGG(
    Language 
    ORDER BY cnt DESC, latest_use_date DESC 
    LIMIT 1
  )[OFFSET(0)] most_frequent_language
FROM (
  SELECT 
    User_ID,
    Language,
    COUNT(*) AS cnt,
    MAX(date) AS latest_use_date -- 统计每个用户对应每种语言的最近一次使用时间
  FROM `project.dataset.language`
  WHERE Language IS NOT NULL
  GROUP BY User_ID, Language
)
GROUP BY User_ID

按日期+用户维度统计

如果需要按日期拆分,输出每天每个用户的最常用语言,用以下语句:

#standardSQL
SELECT
  date,
  User_ID,
  ARRAY_AGG(
    Language 
    ORDER BY cnt DESC, latest_record_time DESC 
    LIMIT 1
  )[OFFSET(0)] most_frequent_language
FROM (
  SELECT 
    date,
    User_ID,
    Language,
    COUNT(*) AS cnt,
    MAX(date) AS latest_record_time -- 若date字段为天粒度可直接写date,若为精确时间戳保留MAX()即可
  FROM `project.dataset.language`
  WHERE Language IS NOT NULL
  GROUP BY 1,2,3
)
GROUP BY 1,2

逻辑说明

  • 内层子查询除了统计不同维度下各语言的使用次数,同时计算对应语言的最新使用时间作为兜底排序依据
  • ARRAY_AGG排序时优先按使用频次倒序,频次一致时自动按最新使用时间倒序,固定取排序后的第一个值,从根源避免同频次下的重复结果问题
  • 外层GROUP BY包含所有非聚合字段,符合BigQuery的语法校验规则,不会报字段未聚合的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:33:21