互联网服务 数据库统计

遇到一个group by统计问题,请老师解答一下!

简化表数据为:
  日期        科目          借    贷    余额    row_id( 主键)
2009-6-1      100201          1    2      3        1
2009-6-1      100201          2    3      4        2
2009-6-1      100202          3    4      5        3
2009-6-1      100202          8    8      9        4
2009-6-1      100203          4    4      6        5
2009-6-2      100201          1    2      3        6
2009-6-2      100201          2    3      12      7
2009-6-2      100202          3    4      1        8
2009-6-3      100203          5    2      8        9
2009-6-4    100201         1    3      4        10
...................................................................(数据多条)
说明:科目分1级如(1002)和2级,2级科目为100201,100202,100203
希望查询:用户页面输入一级科目如:1002统计出其下2级科目每日合计
格式如下:日期          借    贷    余额


2009-6-1查询结果:
日期                        借    贷      余额
2009-6-1                  1+2+3+8+4 2+3+4+8+4 比较100201取最大row_id对应余额是4 ,比较100202取最大row_id对应余额是9 ,比较100203取最大row_id对应余额是6 余额为:4+9+6  不是3+4+5+9+6


2009-6-2                  1+2+3  2+3+4 比较100201取最大row_id对应余额是4 ,比较100201取最大row_id对应余额是12 ,比较100203取最大row_id对应余额是1,前期同2级100203科目最大row_id对应余额6 余额为:12+1+6  不是12+1

2009-6-3                  5  2  前期同2级100201科目最大row_id对应余额12,前期同2级100202科目最大row_id对应余额1  余额为:12+1+8  不是8也不是12+1+6
.....................................................................................

规则:用户在前台输入一级科目如1002和不定范围的时间段如2009-5-22到2009-6-4,请给出每日统计,案例和格式如上
      1级下2级科目数目不定,但是前4位编码一定是1级科目编码如:1002,2级科目之间编码唯一,查询可用like '1002%'
      2借,贷统计
      余额统计:是统计group by查询开始日期到每天的时间段,而不是每天 如:2009-6-3余额为:12+1+8  不是8也不是12+1+6
   如果这段时间没有科目100204发生业务,暂且不管.


个人遇到困难,请高手最好能给出SQL,关键是余额合计,谢先.
参与5

5 同行回答

顶!!!显示全部
顶!!! 收起
2009-07-16
浏览930
pinkcom pinkcom 软件开发工程师 IBM CSDL LBS
表名我定为tab1SQL如下:select t3.日期,max(t3.余额),sum(t3.借),sum(t3.贷) from (select 日期,余额,借,贷 from tab1 t1                where t1.日期,t1.科目,t1.row_id in(select t2.日期,t2.科目,max(row_id) fr...显示全部
表名我定为tab1
SQL如下:
select t3.日期,max(t3.余额),sum(t3.借),sum(t3.贷) from
(select 日期,余额,借,贷 from tab1 t1
                where t1.日期,t1.科目,t1.row_id in(select t2.日期,t2.科目,max(row_id) from
              tab1 t2 where t2.科目 like in_科目 and(t2.日期>=IN_STARTDATE and t2.日期<=IN_ENDDATE)
              group by t2.日期,t2.科目
      )
) as t3 order by 1 asc [ 本帖最后由 pinkcom 于 2009-7-16 14:44 编辑 ] 收起
互联网服务 · 2009-07-16
浏览929
SELECT T1.日期, T1.借, T1.贷, T2.余额    FROM(SELECT 日期, SUM(借) AS  借, SUM(贷) AS 贷    FROM TABLE   WHERE 日期>=IN_STARTDATE and 日期=IN_STARTDATE and 日期=IN_STARTDATE and 日期显示全部
SELECT T1.日期, T1.借, T1.贷, T2.余额
    FROM
(SELECT 日期, SUM(借) AS  借, SUM(贷) AS 贷
    FROM TABLE
  WHERE 日期>=IN_STARTDATE and 日期<=IN_ENDDATE  
  GROUP BY  日期)T1,
(SELECT 日期, SUM(余额) AS 余额
  FROM TABLE
WHERE 日期>=IN_STARTDATE and 日期<=IN_ENDDATE  
    AND (日期,ROW_ID) IN
       (SELECT 日期, MAX(ROW_ID) AS ROW_ID
          FROM TABLE
         WHERE 日期>=IN_STARTDATE and 日期<=IN_ENDDATE  
         GROUP 日期, 科目)) T2
WHERE T1.日期 = T2.日期; [ 本帖最后由 骑猪撞上墙 于 2009-7-16 15:15 编辑 ] 收起
2009-07-16
浏览881
leo_wyn leo_wyn 商业智能工程师 Security
统计每天一级科目的借贷或余额的和?显示全部
统计每天一级科目的借贷或余额的和? 收起
系统集成 · 2009-07-16
浏览962
zhangzr1979 zhangzr1979 软件开发工程师 信云信阳
使用嵌套语句就可以解决问题显示全部
使用嵌套语句就可以解决问题 收起
互联网服务 · 2009-07-16
浏览939

提问者

deadman
deadman 0 0 3
软件开发工程师 东软
评论561

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2009-07-16
  • 关注会员:0 人
  • 问题浏览:5256
  • 最近回答:2009-07-16
  • X社区推广