我有一个表,其中包含以下字段:customer_id、start_trial_date、end_trial_date。我正在尝试编写一个查询,我可以用它来计算给定日期的customer_id。
|+-------------+------------+------------+
| customer_id | start_date | end_date |
+-------------+------------+------------+
| 1 | 2017-02-03 | 2017-05-01 |
| 2 | 2017-04-07 | 2017-09-01 |
| 3 | 2017-03-02 | 2018-03-04 |
| 4 | 2013-02-25 | 2015-01-22 |
| 5 | 2015-11-10 | 2016-03-25 |
| .... | .... | .... |
+-------------+------------+------------+我如何编写一个查询,以生成一个结果集,该结果集的所有日期都在某个范围内,并且其符合条件的周期包括该日期的customer_id的计数?
预期输出:
+------------+-----------+
| date | customers |
+------------+-----------+
| 2013-01-01 | 0 |
| …. | …. |
| 2017-04-20 | 3 |
| ….. | …. |
| 2018-12-31 | …. |
+------------+-----------+如果有必要的话,我会使用BigQuery。我曾考虑创建一个列出某个范围内所有日期的帮助表,然后尝试将其连接到我的表中并进行计数,但我在这种方法中没有一个好的连接键。
发布于 2019-03-01 02:21:55
创建一个日程表是一个很好的起点。一旦有了这个表(比如具有列calendar_date的表calendar ),就可以使用LEFT JOIN和aggregation:
SELECT c.calendar_date, COUNT(t.customer_id) customers
FROM calendar c
LEFT JOIN mytable t
ON c.calendar_date >= t.start_date AND c.calendar_date <= t.end_date
GROUP BY c.calendar_date注意:您可以根据自己的具体要求调整不等式条件(>=或>、<=或<)。
https://stackoverflow.com/questions/54931771
复制相似问题