有没有方便的方法来填充Google BigQuery中给定范围内所有日期的表格?我需要的是从2015-06-01到CURRENT_DATE()的所有日期,所以这样的事情:
+------------+
| date |
+------------+
| 2015-06-01 |
| 2015-06-02 |
| 2015-06-03 |
| ... |
| 2016-07-11 |
+------------+
Run Code Online (Sandbox Code Playgroud)
最理想的是,下一步是在两个日期之间获得所有周,即:
+---------+
| week |
+---------+
| 2015-23 |
| 2015-24 |
| 2015-25 |
| ... |
| 2016-28 |
+---------+
Run Code Online (Sandbox Code Playgroud)
我一直在摆弄我发现的以下答案,但我无法让它们起作用,主要是因为核心功能不受支持,我找不到合适的方法来替换它们.
非常感激您的帮忙!
最好,最大
Tim*_*tin 24
Mikhail的答案非常适合BigQuery的遗留sql语法.如果您使用标准SQL语法,则此解决方案稍微容易一些.
BigQuery标准SQL语法实际上具有内置函数GENERATE_DATE_ARRAY,用于从日期范围创建数组.它需要一个开始日期,结束日期和INTERVAL.例如:
SELECT day
FROM UNNEST(
GENERATE_DATE_ARRAY(DATE('2015-06-01'), CURRENT_DATE(), INTERVAL 1 DAY)
) AS day
Run Code Online (Sandbox Code Playgroud)
如果你想要你可以使用的周和年
SELECT EXTRACT(YEAR FROM day), EXTRACT(WEEK FROM day)
FROM UNNEST(
GENERATE_DATE_ARRAY(DATE('2015-06-01'), CURRENT_DATE(), INTERVAL 1 WEEK)
) AS day
Run Code Online (Sandbox Code Playgroud)
所有日期为2015年6月1日至CURRENT_DATE()
SELECT DATE(DATE_ADD(TIMESTAMP("2015-06-01"), pos - 1, "DAY")) AS DAY
FROM (
SELECT ROW_NUMBER() OVER() AS pos, *
FROM (FLATTEN((
SELECT SPLIT(RPAD('', 1 + DATEDIFF(TIMESTAMP(CURRENT_DATE()), TIMESTAMP("2015-06-01")), '.'),'') AS h
FROM (SELECT NULL)),h
)))
Run Code Online (Sandbox Code Playgroud)
两个日期之间的所有星期
SELECT YEAR(DAY) AS y, WEEK(DAY) AS w
FROM (
SELECT DATE(DATE_ADD(TIMESTAMP("2015-06-01"), pos - 1, "DAY")) AS DAY
FROM (
SELECT ROW_NUMBER() OVER() AS pos, *
FROM (FLATTEN((
SELECT SPLIT(RPAD('', 1 + DATEDIFF(TIMESTAMP(CURRENT_DATE()), TIMESTAMP("2015-06-01")), '.'),'') AS h
FROM (SELECT NULL)),h
)))
)
GROUP BY y, w
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5083 次 |
| 最近记录: |