如何在BigQuery中合并两个30分钟间隔的时间戳序列
生成间隔30分钟的时间戳区间列(BigQuery)
方法一:直接生成起始时间,计算结束时间
无需单独生成两个数组,直接生成起始时间序列后,通过TIMESTAMP_ADD计算对应的结束时间,确保每一行的起始、结束时间严格对应,代码更简洁高效:
SELECT start_times AS interval_start, TIMESTAMP_ADD(start_times, INTERVAL 30 MINUTE) AS interval_end FROM UNNEST(GENERATE_TIMESTAMP_ARRAY('2020-01-01', '2021-01-01', INTERVAL 30 MINUTE)) start_times -- 若需和示例一致的倒序排列,添加以下语句 ORDER BY interval_start DESC
方法二:关联两个预生成的时间数组
如果坚持使用你已有的两个时间序列生成逻辑,可以通过OFFSET()函数匹配两个数组的索引位置,保证时间对应:
WITH start_times AS ( SELECT time, OFFSET() AS idx FROM UNNEST(GENERATE_TIMESTAMP_ARRAY('2020-01-01', '2021-01-01', INTERVAL 30 MINUTE)) AS time ), end_times AS ( SELECT time, OFFSET() AS idx FROM UNNEST(GENERATE_TIMESTAMP_ARRAY(TIMESTAMP_ADD('2020-01-01', INTERVAL 30 MINUTE), '2021-01-01', INTERVAL 30 MINUTE)) AS time ) SELECT s.time AS interval_start, e.time AS interval_end FROM start_times s INNER JOIN end_times e ON s.idx = e.idx -- 需倒序则添加 ORDER BY s.time DESC
注:方法一优先推荐,避免生成两个数组的冗余操作,同时杜绝索引不匹配的潜在问题。
内容的提问来源于stack exchange,提问作者tuemar29
相关产品推荐
相关产品推荐

