已有充值表和消费表,要求统计每个月的充值卡至今的消费总额。举例如下:
充值表(CZ):
卡号(cardno) 充值次数(times) 充值日期(loddate) 充值金额(lodamt)
91034567 1 2010-2-12 100
91034567 2 2010-5-21 100
91034567 3 2010-9-16 200
91045678 1 2010-3-1 200
91045678 2 2010-3-23 300
91056789 1 2010-2-19 300
消费表(XF):
卡号(cardno) 消费金额(amt) 消费日期(date)
91034567 40.00 2010-2-15
91034567 60.00 2010-3-26
91034567 100.00 2010-8-11
91034567 160.00 2010-10-3
91045678 120.00 2010-3-1
91045678 80.00 2010-3-5
91045678 220.00 2010-5-15
91056789 278.00 2010-5-2
统计2月份的数据如下:
消费总额sum(amt)= 378(40+60+278)
因为卡片可以回收,所以存在一个卡号重复使用(如91034567,第一次2月份充值后全部消费完,第二次5月份充值又使用了),请各位大侠帮助一下,怎么写这个统计语句?注意两点:
1、不是月度统计,是统计卡片从充值到当前为止的消费,但要考虑回收问题,如果回收后再次充值,则此后的消费计算在下次充值后的消费统计中
2、同一张卡片前后几次充值的金额可以不同
充值表(CZ):
卡号(cardno) 充值次数(times) 充值日期(loddate) 充值金额(lodamt)
91034567 1 2010-2-12 100
91034567 2 2010-5-21 100
91034567 3 2010-9-16 200
91045678 1 2010-3-1 200
91045678 2 2010-3-23 300
91056789 1 2010-2-19 300
消费表(XF):
卡号(cardno) 消费金额(amt) 消费日期(date)
91034567 40.00 2010-2-15
91034567 60.00 2010-3-26
91034567 100.00 2010-8-11
91034567 160.00 2010-10-3
91045678 120.00 2010-3-1
91045678 80.00 2010-3-5
91045678 220.00 2010-5-15
91056789 278.00 2010-5-2
统计2月份的数据如下:
消费总额sum(amt)= 378(40+60+278)
因为卡片可以回收,所以存在一个卡号重复使用(如91034567,第一次2月份充值后全部消费完,第二次5月份充值又使用了),请各位大侠帮助一下,怎么写这个统计语句?注意两点:
1、不是月度统计,是统计卡片从充值到当前为止的消费,但要考虑回收问题,如果回收后再次充值,则此后的消费计算在下次充值后的消费统计中
2、同一张卡片前后几次充值的金额可以不同
只要输入相应的月份,就可以统计这个月的充值卡的消费记录。
select sum(amt) ...where loddate = 要统计的月份
SUM(B.AMT)
FROM CZ A,XF B
WHERE A.CARDNO = B.CARDNO
AND A.LODDATE <= B."DATE"
AND NOT EXISTS(SELECT 1 FROM CZ C
WHERE C.CARDNO= A.CARDNO AND
C.LODDATE <= B."DATE"
AND C.LODDATE > A.LODDATE)
AND TO_CHAR(LODDATE,'YYYYMM') = '201002'
给出执行计划来看一下吧
explain plan for查看执行计划