场景:从bigquery中,必须获取指定日期的周数据+前一周数据+下一周数据。星期三开始上课。
已尝试查询:
Select * from table
and extract(week(wednesday) from Calendar_Day) >= (extract(week(wednesday) from PARSE_DATE('%d/%m/%Y','21/10/2020')) - 1)
and extract(week(wednesday) from Calendar_Day) >= (extract(week(wednesday) from PARSE_DATE('%d/%m/%Y','21/10/2020') ))
and extract(week(wednesday) from Calendar_Day) <= (extract(week(wednesday) from PARSE_DATE('%d/%m/%Y','21/10/2020')) + 1)
但这对我不起作用。需要帮助解决此问题。提前感谢!
EXTRACT
周,就像代码已经做的那样。一年一周地重复GROUP BY
表示周和年。在这一点上,我发现从剩余的字段中生成STRUCT
很方便,因为它简化了剩余的代码- 使用执行
GROUP BY
的查询进行另一个查询,我使用了WITH
。在最后一个查询中,LEAD
和LAG
按周显示具有WINDOW
的数据
下面是一个来自公共数据集的示例。
WITH
data_by_week AS (
SELECT
EXTRACT(year FROM date) AS year,
EXTRACT(week(wednesday) FROM date) AS week,
struct(
SUM(new_tested) as total_new_tested,
sum(new_recovered) as total_new_recovered
) as week_data
FROM
`bigquery-public-data.covid19_open_data.covid19_open_data`
GROUP BY
year,
week )
SELECT
year,
week,
LAG(week_data) OVER window_by_week AS previous_week,
week_data AS current_week,
LEAD(week_data) OVER window_by_week AS following_week
FROM
data_by_week
WINDOW
window_by_week AS ( ORDER BY year, week)
ORDER BY
year,
week