我使用此查询
SELECT userId, submDate, COUNT(submId) AS nSubms
FROM submissions
GROUP BY userId, submDate
ORDER BY userId, submDate
获取每个用户每个日期提交的总数 但是我需要为每个用户提供渐进计数,以便我可以看到他们的提交如何随着时间累积。
这可以在查询中实现吗?
编辑:获得的表格如下:
userId submDate nSubms
1 2-Feb 1
1 4-Feb 7
2 1-Jan 4
2 2-Jan 2
2 18-Jan 1
我想制作这个:
userId submDate nSubms progressive
1 2-Feb 1 1
1 4-Feb 7 8
2 1-Jan 4 4
2 2-Jan 2 6
2 18-Jan 1 7
编辑2:很抱歉没有提及,我不允许使用:
DISTINCT关键字
因为我使用的工具不允许这些。
答案 0 :(得分:2)
您可以使用自联接来获取同一个表的所有行,其中包含当前行之前的日期:
SELECT s0.userId, s0.submDate, COUNT(s0.submId) AS nSubms, COUNT (s1.submId) AS progressive
FROM submissions AS s0
JOIN submissions AS s1 ON s1.userId=s0.userId AND s1.submDate<=s0.submDate
GROUP BY s0.userId, s0.submDate
ORDER BY s0.userId, s0.submDate
这将迫使数据库一次又一次地对所有相同的行进行无意义的工作。最好在调用查询的任何脚本中添加nSubms
,或者在SQL变量中添加{{1}},如果在您的环境中可用。
答案 1 :(得分:1)
最佳解决方案是在客户端进行此操作 这是工作的正确工具。数据库不适合这种任务
答案 2 :(得分:1)
Select S.userId, S.submDate, Count(*) As nSubms
, (Select Count(*)
From submissions As S1
Where S1.userid = S.userId
And S1.submDate <= S.submDate) As TotalSubms
From submissions As S
Group By S.userid, S.submDate
Order By S.userid, S.submDate