如何在标准 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 周值的列?的主要内容,如果未能解决你的问题,请参考以下文章