有没有一种方法可以编写 SQL 查询,根据另一列的计数 returns 累积结果?

Is there a method to write a SQL query that returns cumulative results based on the count of another column?

我有一个查询,我正在计算自服务开始以来每天注册该服务的新用户总数。

到目前为止我有:

SELECT DISTINCT CONVERT(DATE, Account_Created) AS Date_Created, 
COUNT(ID) OVER (PARTITION BY CONVERT(DATE, Account_Created)) AS New_Users
FROM My_Table.dbo.NewAccts
ORDER BY Date_Created

这个returns:

Date_Created | New_Users
--------------------------
2020-01-01         1
2020-01-03         3
2020-01-04         2
2020-01-06         5
2020-01-07         9

我想要的是 return 第三列,其中包含从开始到现在的每一天的累计总数。所以第一天只有一个新用户。 1月3日,新注册了三个用户,从一开始就注册了四个--依此类推。

Date_Created | New_Users | Cumulative_Tot
------------------------------------------
2020-01-01         1             1
2020-01-03         3             4
2020-01-04         2             6
2020-01-06         5             11
2020-01-07         9             20

我的想法是涉及 ROW_NUMBER() 函数,这样我就可以将每个连续的行分开并加在一起,尽管我不确定这是否正确。我的感觉是,我可能正在认真考虑这个问题,而此时的逻辑只是在逃避我。感谢您的帮助。

作为初学者:我建议聚合而不是 DISTINCT 和 window 计数。这使意图更清晰,并且可能更有效。

然后,您可以使用 window 总和来计算累积计数。

SELECT 
    CONVERT(DATE, Account_Created) AS Date_Created, 
    COUNT(*) AS New_Users
    SUM(COUNT(*)) OVER(ORDER BY CONVERT(DATE, Account_Created)) Cumulative_New_Users
FROM My_Table.dbo.NewAccts
GROUP BY CONVERT(DATE, Account_Created)
ORDER BY Date_Created