如何用SQL把列的前一个值和后一个值相加?

[复制链接]
查看11 | 回复9 | 2010-11-11 18:03:08 | 显示全部楼层 |阅读模式
场景是这样的
现在想知道每个月的总用户数
但是我的表有createtime这个字段,用下面的语句,我只能统计每个月新开的用户有哪些
selectto_char(t.createtime,'yyyyMM') as create_month ,count(*) 用户数 from t_userinfo t
where t.status=0
group by to_char(t.createtime,'yyyyMM')
order by create_month;
/
CREATE_MONTH 用户数
------------ ----------
201101
1615
201102
1137
201103
481
201104
310
201105
5747
201106
688
201107
975
201108
587
201109
2214
201110
3336
201111
14223
201112
9527

但是我想知道每个月的总用户数
例如系统从201101开始上线,那么一月份的总用户数是1615
在201102又开了1137个用户
那么201102就有了总用户数是 1615+1137
同理201103就是 一月开户数+2月开户数+3月开户数=1615+1137+481
依次统计到最近的月份。
请问有什么简易的方法吗?

回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层

如下:

select to_char(t.createtime, 'yyyyMM') create_month,
count(*) cnt
sum(count(*)) over(order by to_char(t.createtime, 'yyyyMM')) sum_cnt -- the value what you want!
from t_userinfo t
where t.status = 0
group by to_char(t.createtime, 'yyyyMM')
order by create_month;

回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
需求和题目矛盾
要不看你需求,我会告诉你lead/lag & nvl
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
lastwinner 发表于 2012-1-9 20:28
需求和题目矛盾
要不看你需求,我会告诉你lead/lag & nvl

其实当时我就拿捏不住这个标题
请教一个语文表达的问题,就是这个需求该如何简单的标题文字来表述呢?
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
LZ,上面我提供的方法就能实现你的要求, 其实就是计算累计!
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
jayli426 发表于 2012-1-10 11:20
其实当时我就拿捏不住这个标题
请教一个语文表达的问题,就是这个需求该如何简单的标题文字来表述呢?

5L的模范Bell同学已经回答你了,这叫做累计,就你这里而言,叫累加


回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
野花笑得好淫 荡


回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
就是累加计算,不是前后值,说明LZ没有搞清楚真正的需求
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
用分析函数over(),二楼的不是把sql写出来了么,
回复

使用道具 举报

千问 | 2010-11-11 18:03:08 | 显示全部楼层
分析函数,很简单的处理。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行