如何在标准 SQL 的 BigQuery 中过滤具有 iso 周值的列?

Posted

技术标签:

【中文标题】如何在标准 SQL 的 BigQuery 中过滤具有 iso 周值的列?【英文标题】:How to filter the a column with isoweek values in BigQuery in StandardSQL? 【发布时间】:2021-12-16 17:31:51 【问题描述】:

我有下表,我只想过滤过去 4 周 - 挑战:基础表的日期范围必须是 2018 - 2021 年,以便可以填充所有其他列。过滤日期对我不起作用,因为这样我就无法获得上一年列的数据。

如何过滤表格,以便始终获得从今天开始的最近 4 周的数据,同时获得所有其他列的数据?

+---------+---------------+---------------+---------------+---------------+--+
| isoweek | sessions_2021 | sessions_2020 | sessions_2019 | sessions_2018 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 44      |        534260 |        156450 |        476604 |        539819 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 45      |        514197 |        133285 |        481228 |        491133 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 46      |        487541 |        122930 |        448876 |        485281 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 47      |        502791 |        169920 |        267869 |        491630 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 48      |        430129 |        144058 |          null |        459051 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 49      |        410885 |        127426 |          null |        468970 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 50      |        183323 |        147254 |          null |        438814 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 51      |          null |        122491 |          null |        455786 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 52      |          null |         70972 |          null |        478501 |  |
+---------+---------------+---------------+---------------+---------------+--+
| 53      |          null |          null |         52712 |          null |  |
+---------+---------------+---------------+---------------+---------------+--+

【问题讨论】:

不清楚(至少对我来说)输入数据到底是什么以及预期的输出是什么?请查看How to create a Minimal, Complete, and Verifiable example 并更新您的问题,以便我们为您提供帮助! 【参考方案1】:

如果输入是您上面的示例表,您可以尝试以下操作:

with sample_data as (
    select isoweek from unnest(generate_array(1,52,1)) as isoweek
)

select isoweek
from sample_data
where isoweek between extract(isoweek from date_sub(current_date(),INTERVAL 4 WEEK)) 
    and extract(isoweek from current_date());

【讨论】:

以上是关于如何在标准 SQL 的 BigQuery 中过滤具有 iso 周值的列?的主要内容,如果未能解决你的问题,请参考以下文章

标准 sql 中的 BigQuery 过滤记录

BigQuery:使用标准 SQL 过滤重复字段

BigQuery:如何在 C# 中启用标准 SQL

如何在 BigQuery 标准 SQL 中查询 Bigtable 列值?

如何使用标准 SQL 在 BigQuery 中透视表?

如何在 bigquery 标准 sql 中展平结构?