在 BigQuery 中获取按天分组的最大数量的唯一 ID

Posted

技术标签:

【中文标题】在 BigQuery 中获取按天分组的最大数量的唯一 ID【英文标题】:Getting Unique ID foe a maximum amount grouped by days in BigQuery 【发布时间】:2016-01-06 10:52:34 【问题描述】:

我在 BigQuery 中有这个查询:

SELECT 
  ID,
  max(amount) as money,
  STRFTIME_UTC_USEC(TIMESTAMP(time), '%j') as day 
FROM  table 
GROUP BY day 

控制台显示错误,因为它希望将 ID 添加到 group by 子句,但如果我在 group by 中添加 ID,它将获得特定日期的多个 ID。 我想打印一个特定日期的最大数量的唯一 ID。

例如:

ID: 1    Money:123     Day:365

【问题讨论】:

【参考方案1】:

从问题中不清楚,但看起来您在特定日期每个给定 ID 只有一个条目。假设这一点,下面的查询可以满足您的需求

SELECT id, amount, day
FROM (
  SELECT 
    id, amount, day,
    ROW_NUMBER() OVER(PARTITION BY day ORDER BY amount DESC) AS win
  FROM dataset.table
)
WHERE win = 1

 

如果上述假设是错误的(因此同一天您有多个相同 id 的条目),请在下面使用

SELECT id, amount, day
FROM (
  SELECT id, amount, day,
    ROW_NUMBER() OVER(PARTITION BY day ORDER BY amount DESC) AS win
  FROM (
    SELECT id, SUM(amount) AS amount, day
    FROM dataset.table
    GROUP BY id, day
  )
)
WHERE win = 1

 

【讨论】:

以上是关于在 BigQuery 中获取按天分组的最大数量的唯一 ID的主要内容,如果未能解决你的问题,请参考以下文章

SQL Count 按天分组

iPhone CoreData:如何按天对获取的结果进行分组?

无法从 BigQuery 中的时间戳中提取日期

BigQuery 在选择不同行时按一个字段中的最大值分组

mssql 2005查询 请问我要实现分组获取最大值,怎么写sql查询指令

按天分组并计数,以便在没有额外表格的情况下获得 Max、Min、Percentile 等