【发布时间】:2021-01-12 00:22:54
【问题描述】:
现在我有一个名为 dates 的视图,看起来像这样:
|first_day|last_day|
|---------|--------|
|2020-08-17T00:00:00+00:00|2020-12-04T00:00:00+00:00|
|2020-11-23T00:00:00+00:00|2020-12-07T00:00:00+00:00|
|2020-09-14T00:00:00+00:00|2020-12-04T00:00:00+00:00|
|2020-09-14T00:00:00+00:00|2020-12-04T00:00:00+00:00|
|2020-09-14T00:00:00+00:00|2020-12-04T00:00:00+00:00|
... 大约 300 行...
我使用此 SQL 查询创建了另一个视图以生成从 2020 年 6 月 1 日到今天(无论那天是哪一天)的一行日期:
SELECT GENERATE_TIMESTAMP_ARRAY('2020-06-01', CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AS date
生成这样的表(我们称之为dateseries):
|date|
|----|
|2020-06-01 00:00:00 UTC|
|2020-06-02 00:00:00 UTC|
|2020-06-03 00:00:00 UTC|
|2020-06-04 00:00:00 UTC|
...从 2020 年 6 月 1 日到 current_timestamp,间隔 1 天,直到当前日期。
现在我要做的是遍历dateseries 中的每一行值,并在dates 视图中检查该时间戳值(来自dateseries)是否大于first_day 列并且小于@987654330 @ 柱子。如果是,则数 1。所以它几乎是两个循环。第一个循环遍历dateseries 中的每个值,然后将其与dates 视图中的每一行进行比较,比较两列first_day 和last_day。我想另一种思考方式是,如果 dateseries 的值在日期视图中的 first_day 和 last_day 列之间,则计数为 1,否则为 0。
最后我想要一个看起来像这样的表(日期列与 June1 相同的时间序列 -> current_timestamp()):
|date|count|
|----|-----|
|2020-06-01 00:00:00 UTC|32|
|2020-06-02 00:00:00 UTC|31|
|2020-06-03 00:00:00 UTC|22|
|2020-06-04 00:00:00 UTC|5|
|2020-06-05 00:00:00 UTC|16|
...等等...
如何在 BigQuery SQL 中执行此操作?
编辑:不确定为什么表格语法不起作用...
【问题讨论】:
标签: sql google-bigquery