每天的 SQL 计数并在接下来的所有日子里加在一起
Posted
技术标签:
【中文标题】每天的 SQL 计数并在接下来的所有日子里加在一起【英文标题】:SQL count per day and add together all following days 【发布时间】:2016-11-04 15:40:27 【问题描述】:我正在尝试编写一个 SQL 查询来计算每天的用户数并将结果加在一起。我被卡住了,因为我不知道如何动态地将结果相加。
表:
UserId | CreateDate
-------+----------------------------
1 | 2016-06-23 13:59:24.0000000
2 | 2016-06-23 15:59:24.0000000
3 | 2016-06-24 05:59:24.0000000
...
我有以下查询来计算每天的注册人数。
SELECT
CONVERT(date, u.CreateDate) as [Date], Count(UserId) as [Count]
FROM
User as u
GROUP BY
CONVERT(date, u.CreateDate)
ORDER BY
[Date]
我不知道如何将结果相加。我希望 SQL Server 2008 R2 有一个适合我的情况的内置函数。还是我需要创建临时表?
假设第 1 天有 2 个注册,第 2 天有 1 个注册,第 3 天有 4 个注册,我希望收到这样的结果:
2016-06-23 | 2
2016-06-24 | 2 + 1 = 3
2016-06-25 | 3 + 4 = 7
我需要一个动态解决方案,因为查询将有另一个日期限制 => 其中 CreateDate 在 x 和 y 之间。
谢谢 鲁埃迪
【问题讨论】:
【参考方案1】:您可以使用sum
窗口函数获取运行总数。
select [Date],sum([Count]) over(order by [Date])
from (SELECT CONVERT(date, u.CreateDate) as [Date], Count(UserId) as [Count]
FROM User as u
GROUP BY CONVERT(date, u.CreateDate)
) x
order by 1
添加where
子句以过滤内部查询中的特定日期范围。
【讨论】:
应该是SELECT TOP n CONVERT(date, u.CreateDate) as [Date], ...
这行得通,我已经知道 Sum,但我认为这里正在发挥作用。 Over 对我来说是新的,我必须更深入地了解这个功能。谢谢你。我会尽快将您的答案标记为解决方案。你太快了:)【参考方案2】:
使用红移数据库
select [Date],sum([Count]) over(order by [Date] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
from (SELECT CONVERT(date, u.CreateDate) as [Date], Count(UserId) as [Count]
FROM User as u
GROUP BY CONVERT(date, u.CreateDate)
) x
order by 1
【讨论】:
您能否在回答中包含逻辑或此代码的工作原理?以上是关于每天的 SQL 计数并在接下来的所有日子里加在一起的主要内容,如果未能解决你的问题,请参考以下文章