Kaa*_*rak 3 sql sql-server azure-sql-database
我有一个user这样的表:
id | createdAt | name ...
---+--------------------------------+-----------
1 2017-04-12 13:19:37.287 +00:00 X
2 2017-04-12 13:19:37.287 +00:00 Y
3 2017-04-12 13:19:37.287 +00:00 Z
4 2017-04-13 13:19:37.287 +00:00 T
5 2017-04-13 13:19:37.287 +00:00 W
6 2017-04-14 13:19:37.287 +00:00 W
7 2017-04-14 13:19:37.287 +00:00 W
Run Code Online (Sandbox Code Playgroud)
我需要的是每天累积用户数,如下所示:
day | count
-----------+--------
2017-04-12 3
2017-04-13 5
2017-04-14 7
Run Code Online (Sandbox Code Playgroud)
我尝试用这个SQL语句分组日,但它只获取当天的记录而不是累积的
SELECT
CAST(createdAt AS DATE) AS date, COUNT(*) AS userCount
FROM
dbo.Users
GROUP BY
CAST(createdAt AS DATE)
ORDER BY
CAST(createdAt AS DATE) DESC
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏
谢谢
在SQL Server 2012+中,您将使用累积总和:
SELECT CAST(createdAt AS DATE) as date, COUNT(*) as userCount,
SUM(COUNT(*)) OVER (ORDER BY CAST(createdAt AS DATE)) as cumulative_count
FROM dbo.Users u
GROUP BY CAST(createdAt AS DATE)
ORDER BY CAST(createdAt AS DATE) DESC;
Run Code Online (Sandbox Code Playgroud)
在早期版本中,需要另一种方法,例如相关子查询:
WITH u as (
SELECT CAST(createdAt AS DATE) as date, COUNT(*) as userCount
FROM dbo.Users u
GROUP BY CAST(createdAt AS DATE)
)
SELECT u.*,
(SELECT SUM(usrCount)
FROM u u2
WHERE u2.date <= u.date
) as cumulative_count
FROM u
ORDER BY date DESC;
Run Code Online (Sandbox Code Playgroud)