如何查询出累计值

o_public 2015-03-24 07:53:30
比如我有用户表,然后我要统计1,2,3月份的累计注册人数,肯定在时间where添加时间限制,但是能不能通过其他方式,一句SQL能直接把1月份的注册量是多少?2月份注册量是累计值,1月值+2月值 。以此类推,不知道是否能一句SQL完成。

--------------------------------------------------------------
select month(创建时间),count(*) from 用户表 group by month(创建时间)
结果
1 200
2 500
3 200
但是我想要得到的结果是
1 200
2.700 实际是(200+500)是叠加值
3 900 。。。。
这样如何做?
-------------------------------------------------------------------
如果是
select
(
select count(*) from 用户表 where 时间 as ‘一月’
select count(*) from 用户表 where 时间 as ‘二月’
....
)
这种方案不采纳,
...全文
274 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-03-27
  • 打赏
  • 举报
回复
SELECT T1.[month],COUNT(1)C
FROM(SELECT MONTH([创建时间])AS[month]FROM[用户表]GROUP BY MONTH([创建时间]))AS T1
	JOIN [用户表] T2 ON MONTH(T2.[创建时间])<=T1.[month]
GROUP BY T1.[month]
不考虑跨年,可以这样查询 已修改,应该兼容MYSQL
引用 10 楼 o_public 的回复:
想了大半天,没思路。。。。求大神回复。。 是mysql的数据库呢。
还在加载中灬 2015-03-27
  • 打赏
  • 举报
回复
嗯,好样的,MYSQL的日期格式还不是很清楚~~
o_public 2015-03-27
  • 打赏
  • 举报
回复
引用 13 楼 o_public 的回复:
[quote=引用 12 楼 ky_min 的回复:]
SELECT T1.[month],COUNT(1)C
FROM(SELECT MONTH([创建时间])AS[month]FROM[用户表]GROUP BY MONTH([创建时间]))AS T1
JOIN [用户表] T2 ON MONTH(T2.[创建时间])<=T1.[month]
GROUP BY T1.[month]
不考虑跨年,可以这样查询
已修改,应该兼容MYSQL

[quote=引用 10 楼 o_public 的回复:]

想了大半天,没思路。。。。求大神回复。。
mysql的数据库呢。
[/quote]

嗯,我改了下,可以实现了,对于不能跨年,用了left(创建时间,7),

[/quote]

原始数据。是这样的。
o_public 2015-03-27
  • 打赏
  • 举报
回复
引用 12 楼 ky_min 的回复:
SELECT T1.[month],COUNT(1)C
FROM(SELECT MONTH([创建时间])AS[month]FROM[用户表]GROUP BY MONTH([创建时间]))AS T1
JOIN [用户表] T2 ON MONTH(T2.[创建时间])<=T1.[month]
GROUP BY T1.[month]
不考虑跨年,可以这样查询
已修改,应该兼容MYSQL

[quote=引用 10 楼 o_public 的回复:]

想了大半天,没思路。。。。求大神回复。。
mysql的数据库呢。
[/quote]

嗯,我改了下,可以实现了,对于不能跨年,用了left(创建时间,7),

o_public 2015-03-26
  • 打赏
  • 举报
回复
引用 8 楼 jamesrggg 的回复:
Declare @TmpData Table(
	M Int,
	P Int)
	
Insert Into @TmpData
Select 1,200
Union
Select 2,300
Union
Select 3,400


Select M,(Select SUM(P) From @TmpData Where M<= A.M) From @TmpData A
忘记写了,我在用mysql。
jamesrggg 2015-03-26
  • 打赏
  • 举报
回复
引用 10 楼 o_public 的回复:
想了大半天,没思路。。。。求大神回复。。 是mysql的数据库呢。
我写的是标准的SQL哇,把内存表替换为你的表就行了
o_public 2015-03-26
  • 打赏
  • 举报
回复
想了大半天,没思路。。。。求大神回复。。 是mysql的数据库呢。
还在加载中灬 2015-03-25
  • 打赏
  • 举报
回复
;WITH CTE AS(
	SELECT[month],COUNT(*)C FROM TB GROUP BY[month]
)
SELECT T1.[month],SUM(T2.C)C
FROM CTE T1
	JOIN CTE T2 ON T1.[month]>=T2.[month]
GROUP BY T1.[month]
jamesrggg 2015-03-25
  • 打赏
  • 举报
回复
Declare @TmpData Table(
	M Int,
	P Int)
	
Insert Into @TmpData
Select 1,200
Union
Select 2,300
Union
Select 3,400


Select M,(Select SUM(P) From @TmpData Where M<= A.M) From @TmpData A
还在加载中灬 2015-03-25
  • 打赏
  • 举报
回复
引用 5 楼 o_public 的回复:
[quote=引用 4 楼 ky_min 的回复:]
;WITH CTE AS(
	SELECT[month],COUNT(*)C FROM TB GROUP BY[month]
)
SELECT T1.[month],SUM(T2.C)C
FROM CTE T1
	JOIN CTE T2 ON T1.[month]>=T2.[month]
GROUP BY T1.[month]
这是mysql的吗?为啥看不懂呢?[/quote]这是SQLSERVER 不过是2005+才有效的语法
o_public 2015-03-25
  • 打赏
  • 举报
回复
引用 3 楼 zhll2046 的回复:


DECLARE @T TABLE(ID INT,Quantity INT)

INSERT INTO @T VALUES
(1,200),
(2,500),
(3,200),
(4,700)


SELECT ID,CAT.accQuantity
FROM @T T
CROSS APPLY
(
SELECT SUM(Quantity) accQuantity FROM @T WHERE ID <= T.ID
) AS CAT
木看懂?
o_public 2015-03-25
  • 打赏
  • 举报
回复
引用 4 楼 ky_min 的回复:
;WITH CTE AS(
	SELECT[month],COUNT(*)C FROM TB GROUP BY[month]
)
SELECT T1.[month],SUM(T2.C)C
FROM CTE T1
	JOIN CTE T2 ON T1.[month]>=T2.[month]
GROUP BY T1.[month]
这是mysql的吗?为啥看不懂呢?
zhll2046 2015-03-24
  • 打赏
  • 举报
回复


DECLARE @T TABLE(ID INT,Quantity INT)

INSERT INTO @T VALUES
(1,200),
(2,500),
(3,200),
(4,700)


SELECT ID,CAT.accQuantity
FROM @T T
CROSS APPLY
(
SELECT SUM(Quantity) accQuantity FROM @T WHERE ID <= T.ID
) AS CAT
薛定谔的DBA 2015-03-24
  • 打赏
  • 举报
回复

--	drop table [用户表]
create table [用户表]([创建时间] datetime)

insert into [用户表]
select '2015-01-01' union all
select '2015-01-01' union all
select '2015-02-01' union all
select '2015-02-01' union all
select '2015-03-01' union all
select '2015-03-01' union all
select '2015-03-01'

;with [用户a] as(  
    select row_number() over(order by year([创建时间]),month([创建时间])) id
	,year([创建时间]) 年,month([创建时间]) 月,count(*) as 记录 
	from [用户表] 
	group by year([创建时间]),month([创建时间])
)  
, [用户b] as(  
    select id,年,月,记录 as 累计 from [用户a] where id = 1  
    union all  
    select a.id,a.年,a.月,a.记录+b.累计   
    from [用户a] a inner join [用户b] b on a.id=b.id+1  
)    
select * from [用户b] order by 年,月,id
o_public 2015-03-24
  • 打赏
  • 举报
回复

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧