sql的统计解决思路
发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
sql的统计
有一张数据表如下:
卡号 支付金额 余额 支付日期
1511710 27.9 172.1 2006-10-3
1511710 103 69.1 2007-1-2
1511710 69.1 0 2007-5-1
1511710 282 218 2008-1-12
1511710 105.2 112.8 2008-11-11
1511710 53 59.8 2009-3-5
1512833 100 0 2006-12-20
1512833 37.5 262.5 2007-4-10
1512833 118 144.5 2007-7-2
1512833 95.3 49.2 2007-10-21
1512833 49.2 0 2008-2-15
1513545 105 395 2007-8-22
1513545 200 195 2009-10-5
.......
我想统计每年底各个卡片的余额,应该怎么写这个语句。
如统计2006、2007、2008、2009年底的余额,对应的累计余额应该是:
sum2006=172.1+0
sum2007=0+49.2+395+...
sum2008=112.8+0+395+...
sum2009=59.8+0+195+...
注意:
1、2006年只有2张,所以只要统计2个数据
2、卡片1513545在2008年没有消费,所以2008年底的余额和2007年底是一样的
3、同理,卡片1512833在2008年后没有再使用,它在2009年底的余额就是2008底的余额
各位大虾,拜托了。
------解决方案--------------------
只求1个年度的算法:
SQL code--卡号 支付金额 余额 支付日期
with T as (
select '1511710' KH, 27.9 ZF, 172.1 YE, to_date('2006-10-3','yyyy-mm-dd') ZFRQ from dual union all
select '1511710', 103, 69.1, to_date('2007-1-2','yyyy-mm-dd') from dual union all
select '1511710', 69.1, 0, to_date('2007-5-1','yyyy-mm-dd') from dual union all
select '1511710', 282, 218, to_date('2008-1-12','yyyy-mm-dd') from dual union all
select '1511710', 105.2, 112.8, to_date('2008-11-11','yyyy-mm-dd') from dual union all
select '1511710', 53, 59.8, to_date('2009-3-5','yyyy-mm-dd') from dual union all
select '1512833', 100, 0, to_date('2006-12-20','yyyy-mm-dd') from dual union all
select '1512833', 37.5, 262.5, to_date('2007-4-10','yyyy-mm-dd') from dual union all
select '1512833', 118, 144.5, to_date('2007-7-2','yyyy-mm-dd') from dual union all
select '1512833', 95.3, 49.2, to_date('2007-10-21','yyyy-mm-dd') from dual union all
select '1512833', 49.2, 0, to_date('2008-2-15','yyyy-mm-dd') from dual union all
select '1513545', 105, 395, to_date('2007-8-22','yyyy-mm-dd') from dual union all
select '1513545', 200, 195, to_date('2009-10-5','yyyy-mm-dd') from dual )
-- 上面是测试数据,可以忽略
SELECT KH,YE ,ZFRQ
FROM T
WHERE (KH,ZFRQ) IN (SELECT KH,MAX(ZFRQ) FROM T WHERE TO_CHAR(ZFRQ,'YYYY') <= '2007' GROUP BY KH) ;
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
创建同义词报ORA-00955
各位大神,我创建公有同义词,怎么会报ORA-00955错?很多人遇到建立私有同义词有这个错,我怎么建立公有同义词也...
-
impdp导入为什么索引会占的非常大。
本帖最后由 xixi_168 于 2014-07-19 23:10:47 编辑
在做数据...
-
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
测试没有成功。
ORA-12514: TNS: 监听程序当前无法识别连接描述...
-
oracle神牛进!!!
1、如何用sql查出oracle自带的所有函数?
2、给定ascii码,如何用sql查出对应的字符?
3、为什么在java中和在oracl...
-
oracle的cmd执行一个.sql文件,遇到异常时退出而不是继续执行
假设有一个1.sql文件,内容是
Declare
X varchar2(20);
Begin
Sc...
-
oracle查看某一条记录中为空的字段总数
oralce中,某一条记录中怎么得到这条记录中字段值为空的总数呢?(不为空的总数也可)
比如:id a1...
-
三台ORACLE通信,DBLINK
三台ORACLE服务器,A、B、C,其中A和B在同一个内网,B为双网卡可以连接外网,C为外网ORACLE。现在在B上已经建立DBL...
-
OracleOraDb10g_home1TNSListener无法启动
OracleOraDb10g_home1TNSListener无法启动,每次启动都提示:“在本地计算机无法启动Ora...
-
虚拟机安装RAC,网卡可以用NAT方式连接吗?
大家好:
我看教程上设的,安装配置RAC,配置虚拟机的两块网卡,第一块网卡(eth0,配置公用I...
-
求解oracle监听服务名问题
最近在做服务器的双机热备时,发现两边的监听服务名不一致,一个是OracleOraDb11g_home1TNSListen...