Sql 如何查询表格以获取包括以前日期在内的当前总计数?
我想从以下数据中获取SQL数据库中每天注册用户的当前总数:Sql 如何查询表格以获取包括以前日期在内的当前总计数?,sql,google-bigquery,Sql,Google Bigquery,我想从以下数据中获取SQL数据库中每天注册用户的当前总数: | userID | date_registered | | -------- | --------------- | | 10012 | 2021-03-01 | | 10043 | 2021-03-01 | | 10065 | 2021-03-04 | | 10087 | 2021-03-05 | | 10091 | 2021-03-05 | | 1
| userID | date_registered |
| -------- | --------------- |
| 10012 | 2021-03-01 |
| 10043 | 2021-03-01 |
| 10065 | 2021-03-04 |
| 10087 | 2021-03-05 |
| 10091 | 2021-03-05 |
| 10123 | 2021-03-05 |
| 10231 | 2021-03-06 |
| 10421 | 2021-03-09 |
因此,对于2021-03-01,目前有2个注册用户
对于2021-03-04,目前有3个注册用户,包括以前日期的注册用户
对于2021-03-05,目前有6个注册用户,包括以前日期的注册用户
等等
因此,预期的结果应该是
| total_user | date |
| ---------- | --------------- |
| 2 | 2021-03-01 |
| 3 | 2021-03-04 |
| 6 | 2021-03-05 |
| 7 | 2021-03-06 |
| 8 | 2021-03-09 |
是否有SQL查询可以在BigQuery中完成此结果
非常感谢您的帮助。在BigQuery或任何合理的数据库中,我们可以按日期进行聚合,然后使用SUM作为分析函数:
SELECT
SUM(COUNT(*)) OVER (ORDER BY date_registered) AS total_user,
date_registered AS date
FROM yourTable
GROUP BY
date_registered
ORDER BY
date_registered;
请注意,如果同一用户可能在给定日期被报告多次,则在BigQuery或任何合理的数据库中使用COUNTDISTINCT userID而不是COUNT*
SELECT
SUM(COUNT(*)) OVER (ORDER BY date_registered) AS total_user,
date_registered AS date
FROM yourTable
GROUP BY
date_registered
ORDER BY
date_registered;
请注意,如果同一用户可能在给定日期被报告多次,则使用COUNTDISTINCT userID而不是COUNT*您可以使用此方法,但mysql 8有更实用的方法+
SELECT e1.date_registered, (SELECT COUNT(e2.userID) FROM example e2
WHERE e2.date_registered <= e1.date_registered) AS count_ FROM example e1
GROUP BY date_registered
您可以使用它,但mysql 8有更实用的方法+
SELECT e1.date_registered, (SELECT COUNT(e2.userID) FROM example e2
WHERE e2.date_registered <= e1.date_registered) AS count_ FROM example e1
GROUP BY date_registered
BigQuery中存在错误:如果没有连接两侧字段相等的条件,则无法使用左外部连接。BigQuery中存在错误:如果没有连接两侧字段相等的条件,则无法使用左外部连接。