在 BigQuery 中按周细分的最佳方式

问题描述 投票:0回答:4

所以我想做的是创建一份报告,显示公司每周的销售额。

所以我们有一个名为

created
的时间字段,如下所示:

2016-04-06 20:58:06 UTC

此字段代表销售发生的时间。

现在假设我想创建一个报告,告诉您每周的销售额。所以上面的例子会陷入类似

Week of 2016-04-03
的情况(不必完全这么说,我只是想用最简单的方法来做到这一点)

有人有什么建议吗?我想它涉及使用

UTEC_TO_xxxxxx
函数。

sql google-bigquery bigdata
4个回答
6
投票

文档建议使用标准 SQL 函数,例如 DATE_TRUNC():

SELECT DATE_TRUNC(DATE '2019-12-25', WEEK) as week;

5
投票

您可以使用 WEEK() 函数 - 它为您提供周数

SELECT WEEK('2016-04-06 20:58:06 UTC')

如果您需要一周的第一天 - 您可以尝试类似

STRFTIME_UTC_USEC((UTC_USEC_TO_WEEK(TIMESTAMP_TO_USEC(TIMESTAMP('2016-05-02 20:58:06 UTC')), 0)),'%Y-%m-%d')

2
投票

我必须添加括号:

SELECT DATE_TRUNC(DATE('2016-04-06 20:58:06 UTC'), WEEK) as week;

2
投票

这是一个相当老的问题,从那以后事情就发生了变化。

就我而言,我发现旧的

WEEK
函数不再被识别,所以我不得不改用
EXTRACT
函数。可以在here找到它的文档。

对我来说,只需从时间戳中提取

ISOWEEK
就足够了,这会导致一年中的第几周(
ISOYEAR
)作为数字。

ISOWEEK
:返回
datetime_expression
的 ISO 8601 周数。
ISOWEEK
从周一开始。返回值的范围是 [1, 53]。每个 ISO 年的第一个
ISOWEEK
开始于公历年第一个星期四之前的星期一。

所以我这样做了:

SELECT EXTRACT(ISOWEEK FROM created) as week

如果您想查看一周的最后一天,而不是一年中的周数,那么:

SELECT last_day(datetime(created), isoweek) as week
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.