这种SQL怎么写?

gallardo 2014-10-16 03:49:30
表A如下:


日期 数量
2012-1-1 10
2012-2-5 20
2012-1-15 30
2012-3-1 100
2012-4-1 100
2012-4-12 40
2012-3-10 20
2012-4-21 50
2012-5-15 170


应该怎么写SQL能够将每月份数量汇总,注意汇总并不是汇总当月份,而是当月以及之前的所有月份,比如1月份是12年1月及之前的所有汇总,2月是12年2月及之前的所有汇总?
...全文
101 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gallardo 2014-10-16
  • 打赏
  • 举报
回复
Thanks
binsweet 2014-10-16
  • 打赏
  • 举报
回复
SELECT a.月份,
       (SELECT SUM(b.数量)
          FROM dt b
         WHERE b.月份 <= a.月份) 数量
  FROM dt a
 GROUP BY a.月份
 ORDER BY a.月份
bw555 2014-10-16
  • 打赏
  • 举报
回复
select * from
(SELECT 月份,sum(数量)over(ORDER BY 月份) 数量
from (
select  to_char(日期,'yyyy-mm') 月份,sum(数量) 数量
FROM T
GROUP BY to_char(日期,'yyyy-mm')
)
)where substr(月份,1,4)>='2012'
gallardo 2014-10-16
  • 打赏
  • 举报
回复
引用 2 楼 bw555 的回复:
SELECT 月份,sum(数量)over(ORDER BY 月份) 数量
from (
select  to_char(日期,'yyyy-mm') 月份,sum(数量) 数量
FROM T
GROUP BY to_char(日期,'yyyy-mm')
)
追问一句,因为实际数据中有n年很多月份,实际上结果只需要取12年以后的,但是在累加时需要把12年前的也累加上,应该怎么写条件?
CT_LXL 2014-10-16
  • 打赏
  • 举报
回复
引用 1 楼 gallardo 的回复:
得到的结果应该是这样的:

月份     数量
201201     40
201202     60
201203     220
201204     370
...

with t as
 (select to_date('2012-01-01', 'yyyy-mm-dd') dt, 10 amt
    from dual
  union all
  select to_date('2012-02-05', 'yyyy-mm-dd') dt, 20 amt
    from dual
  union all
  select to_date('2012-01-15', 'yyyy-mm-dd') dt, 30 amt
    from dual
  union all
  select to_date('2012-03-01', 'yyyy-mm-dd') dt, 100 amt
    from dual
  union all
  select to_date('2012-04-01', 'yyyy-mm-dd') dt, 100 amt
    from dual
  union all
  select to_date('2012-04-12', 'yyyy-mm-dd') dt, 40 amt
    from dual
  union all
  select to_date('2012-03-10', 'yyyy-mm-dd') dt, 20 amt
    from dual
  union all
  select to_date('2012-04-21', 'yyyy-mm-dd') dt, 50 amt
    from dual
  union all
  select to_date('2012-05-15', 'yyyy-mm-dd') dt, 170 amt
    from dual)
select t1.mth, sum(amt) over(order by mth)
  from (SELECT to_char(dt, 'yyyymm') mth, sum(amt) amt
          from t
         group by to_char(dt, 'yyyymm')) t1
 order by mth;
bw555 2014-10-16
  • 打赏
  • 举报
回复
SELECT 月份,sum(数量)over(ORDER BY 月份) 数量
from (
select  to_char(日期,'yyyy-mm') 月份,sum(数量) 数量
FROM T
GROUP BY to_char(日期,'yyyy-mm')
)
gallardo 2014-10-16
  • 打赏
  • 举报
回复
得到的结果应该是这样的:

月份     数量
201201     40
201202     60
201203     220
201204     370
...

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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