- 论坛徽章:
- 0
|
20可用积分
需求是这样,需要得出特定某天,所有状态不为1的所有帐户的总余额。
帐户表的数据量是20000条,交易记录表的数据是30-50万条之间。
两个表的主键都是自定义序列自动增长。 表结构不能改了。因为有原始数据。 谢谢各位帮忙给我看看。我写了一条很麻烦的,可是结果不正确。
我的思路是:查询交易记录表,根据帐户外键分组条件内加上状态不为1,取得小于特定日期各个帐户的最大交易日期,取得这条数据的余额,然后进行累加。
我写的语句是:
- select sum(jyjl1.ye) from jyjl jyjl1 join left (
- select max(jyrq) rq1, z1.id zid from jyjl jl1 join left zhb z1 on jl1.zhid=z1.id
- where z1.zt !=1 and jl1.jyrq < to_date('2008-01-20 20:20:20', 'yyyy-MM-dd hh24:mi:ss')
- group by zhid
- ) rs1 on jyjl1.jyrq=rs1.rq1
- where jyjl1.zhid=rs1.zid
复制代码
有两个表,一个主表(帐户表),一个子表(帐户操作记录表),结构大概是这样:
jyjl(交易记录表):
id(主键) jyrq(交易日期) zcje(支出金额) ye(余额) zhid(帐户id外键)
2 2008-01-30 19:30:34 50 950 3
1 2008-01-20 20:20:20 5000 1000 3
5 2008-01-20 10:28:23 500 6000 3
3 2009-12-31 05:30:20 2000 100 4
4 2008-03-30 10:28:23 500 2100 4
6 2008-03-28 10:28:23 500 2600 4
7 2008-02-28 10:28:23 500 3100 4
7 2009-02-28 10:28:23 500 10000 5
zhb(帐户表)
id(主键) xm(姓名) xb(性别) xzye(现在余额) zt状态
3 张二 男 950 0
4 张三 男 100 0
5 李四 男 10000 1
谢谢!!谢谢!
[ 本帖最后由 leweslove 于 2010-1-21 22:23 编辑 ] |
|