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

我想从以下数据中获取SQL数据库中每天注册用户的当前总数:

| 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中存在错误:如果没有连接两侧字段相等的条件,则无法使用左外部连接。