Bigquery:如何根据特定时间范围聚合几列的数据?
Posted
技术标签:
【中文标题】Bigquery:如何根据特定时间范围聚合几列的数据?【英文标题】:Bigquery: How can I aggregate the data of several columns according to a specific time range? 【发布时间】:2020-12-18 04:43:27 【问题描述】:我是大查询的新手,我正在尝试汇总一系列客户帐户中的交易数据、收入数据和访问者数据。我需要按客户名称和 8 个月的时间段对输出进行分组,因此每个客户帐户都有 12 个月的汇总数据(每月的每一天在一个月的条目中加在一起)。我只能设法从每个月的第一天抽出,而不是两者之间的所有内容加在一起:
SELECT
clientname,
DATE_TRUNC(PARSE_DATE('%Y%m%d',date), MONTH) as MonthStart,
SUM (totals.visits) AS visits,
SUM (totals.transactions) AS transactions,
SUM (totals.campaigns) AS campaigns,
sum (totals.totalTransactionRevenue) AS Transactionsrevenue,
FROM `prod.mar.auto` as automotive
GROUP BY
clientname,monthstart
ORDER BY
clientname,monthstart ASC
Limit 1000
out 仅提供当月第一天的值,而不是月份之间的总和。有人可以帮我指出正确的方向吗?
谢谢
【问题讨论】:
“我需要将输出按客户名称和 8 个月的周期分组,因此每个客户帐户都有 12 个月的汇总数据”。 . .这对我来说毫无意义。样本数据和期望的结果真的很有帮助——就像一个清晰的解释一样。 【参考方案1】:部分问题有些不清楚,所以我正在尽力利用我所掌握的信息。
根据我对您问题的理解,整个月的汇总似乎存在问题。它只返回一个月中的一天,而不是整个月的总和。
如果你改变了
DATE_TRUNC(PARSE_DATE('%Y%m%d',date), MONTH) as MonthStart
到
EXTRACT(MONTH FROM DATE) AS MonthStart
这将返回月份的数字,因此您可以汇总,因为每个月的所有日期字段中的数字都是相同的。
这是最后的查询:
SELECT
clientname,
EXTRACT(MONTH FROM DATE) AS MonthStart,
SUM (totals.visits) AS visits,
SUM (totals.transactions) AS transactions,
SUM (totals.campaigns) AS campaigns,
sum (totals.totalTransactionRevenue) AS Transactionsrevenue,
FROM `prod.mar.auto` as automotive
GROUP BY
clientname, MonthStart
ORDER BY
clientname, MonthStart ASC
Limit 1000
为函数提供文档: https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions
【讨论】:
嗨,麦迪逊。谢谢您的答复。当我进入 DATEPART 时,它似乎无法识别它? @MarylinMontoya 我意识到我给了你 SQL Server 语法。我刚刚更新了 Big Query 中的等价物 :)【参考方案2】:如果您想要过去 8 或 12 个月的数据,请使用 WHERE
子句:
SELECT a.clientname,
SUM(a.visits) AS visits,
SUM(a.transactions) AS transactions,
SUM(a.campaigns) AS campaigns,
SUM(a.totalTransactionRevenue) AS Transactionsrevenue,
FROM `prod.mar.auto` as a
WHERE PARSE_DATE('%Y%m%d',date >= DATE_ADD(CURRENT_DATE interval -12 months)
GROUP BY clientname
ORDER BY clientname ASC
Limit 1000;
【讨论】:
以上是关于Bigquery:如何根据特定时间范围聚合几列的数据?的主要内容,如果未能解决你的问题,请参考以下文章
Bigquery/标准 SQL:如何使用 sum() 聚合所有列(大约 100 列)?