sql查询按时间累计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询按时间累计相关的知识,希望对你有一定的参考价值。

用sql查询,表如下
表名:T
编号 时间 金额
A 2009-5-2 1
B 2010-1-1 2
A 2010-2-8 3
B 2010-3-9 4
希望查询后的效果如下
编号 时间 金额 本年累计金额 总累计金额
A 2009-5-2 1 1 1
B 2010-1-1 2 2 2
A 2010-2-8 3 3 4
B 2010-3-9 4 6 6

就是每行后面加两列,分别是到本月的本年累计数,和总共的累计数

如何写这个SQL的查询呢?谢谢
我是要做浏览器报表,要用SQL写好多,这是其中的一部分,不能用EXCEL~~~~~~~~~~

做是可以做出来,我暂时没考虑优化的问题。
我用的是Oracle数据库,有些函数和写法可能数据库产品之间不太一样,没办法了。
首先创建一个表:
indexof Varchar2
dateof Date
feeof Number

然后插入测试数据:
insert all
into test08 values('A',to_date('2009-05-02 00:00:00','yyyy-mm-dd hh24:mi:ss'),1)
into test08 values('B',to_date('2010-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),2)
into test08 values('A',to_date('2010-02-08 00:00:00','yyyy-mm-dd hh24:mi:ss'),3)
into test08 values('B',to_date('2010-03-09 00:00:00','yyyy-mm-dd hh24:mi:ss'),4)
into test08 values('A',to_date('2009-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),5)
into test08 values('A',to_date('2012-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),38)
select * from dual

然后这个表就和你那个差不多了
A 2009-05-02 00:00:00 1
B 2010-01-01 00:00:00 2
A 2010-02-08 00:00:00 3
B 2010-03-09 00:00:00 4
A 2009-03-01 00:00:00 5
A 2012-03-01 00:00:00 38
稍微多了几个主要是测试用。

然后查询你需要的:
select t1.indexof as indexof,t1.dateof as 日期,t1.feeof as 当期费用,
(
select sum(t2.feeof) from test08 t2
where t2.dateof<=t1.dateof
and t2.dateof>=trunc(t1.dateof,'yyyy')
and t2.indexof=t1.indexof
) as 本年度累加,
(
select sum(t2.feeof) from test08 t2
where t2.dateof<=t1.dateof
and t2.indexof=t1.indexof
) as 总累加
from test08 t1
order by dateof

注意:trunc函数是Oracle数据库函数,是取当前日期的年份的。
order by dateof如果不需要可以删除。有什么不明白的地方可以直接M我。
参考技术A 这样的数据放在EXCEL中处理比较好,SQL用来处理数据效果不好

SQL 怎么按时间汇总累计金额

怎么写SQL,想用一段代码同时查到每个月的金额和每一年的累计金额,这边的每一年是从4月1日到第二年的3月31日。

参考技术A select 日期,sum(金额) 金额 from 表名 group by 日期

以上是关于sql查询按时间累计的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句 查询 为空的

579. 查询员工的累计薪水

怎么查看sql server累计执行的sql次数

LeetCode:Database 19.查询员工的累计薪水

SQL 怎么按时间汇总累计金额

问一个考勤SQL语句的问题,想查询一整月考勤记录