楼主: darkstorm

[精华] SQL 大挑战-- 可以放到精华区的几个命题

[复制链接]
论坛徽章:
0
71#
发表于 2006-3-30 01:32 | 只看该作者
第三个问题:
SELECT trandate, income, expense, income_total, expense_total,
       income_total - expense_total balance
  FROM (SELECT trandate, income, expense,
                SUM(income) over(ORDER BY trandate) income_total,
                SUM(expense) over(ORDER BY trandate) expense_total
           FROM (SELECT trandate, SUM(income) income, SUM(expense) expense
                    FROM ((SELECT trandate, income, expense FROM a) UNION ALL
                           (SELECT ((SELECT MIN(trandate) FROM a) + rownum - 1) trandate,
                                   0 income, 0 expense
                              FROM all_objects
                             WHERE rownum <=
                                   (SELECT MAX(trandate) - MIN(trandate) + 1 FROM a)))
                   GROUP BY trandate));

-------------------------------------------------------------------------------------------------------------------------------------------------------

TRANDATE        INCOME    EXPENSE INCOME_TOTAL EXPENSE_TOTAL    BALANCE
----------- ---------- ---------- ------------ ------------- ----------
2006-3-1            50         30           50            30         20
2006-3-2            45         60           95            90          5
2006-3-3             0          0           95            90          5
2006-3-4             0          0           95            90          5
2006-3-5           120         20          215           110        105

使用道具 举报

回复
论坛徽章:
21
红旗
日期:2013-09-30 15:26:01凯迪拉克
日期:2013-10-23 12:48:26比亚迪
日期:2013-11-01 09:19:01奔驰
日期:2013-12-13 09:27:30马上有对象
日期:2014-11-18 10:46:242015年新春福章
日期:2015-04-28 15:24:55慢羊羊
日期:2015-05-28 09:49:31
72#
发表于 2007-4-25 11:56 | 只看该作者
前两个问题的答案 t (表示日期)  i收入 o 支出
select
t,sum(i),sum(o),
(select sum(i)-sum(o) from tab_test b
where b.t <=a.t) c
from tab_test a group by t

使用道具 举报

回复
论坛徽章:
21
红旗
日期:2013-09-30 15:26:01凯迪拉克
日期:2013-10-23 12:48:26比亚迪
日期:2013-11-01 09:19:01奔驰
日期:2013-12-13 09:27:30马上有对象
日期:2014-11-18 10:46:242015年新春福章
日期:2015-04-28 15:24:55慢羊羊
日期:2015-05-28 09:49:31
73#
发表于 2007-4-25 15:09 | 只看该作者
本人刚学sql不久,所以只会用简单的
create table gru_test(t number,i number,o number); t,表示时间,i 收入,o 支出
insert into gru_test values (1,50,30)
insert into gru_test values (2,45,60)
insert into gru_test values (5,60,10)
前两题的解答
select
t,sum(i),sum(o),
(select sum(i)-sum(o) from tab_test b
where b.t <=a.t) c
from tab_test a group by t
第三题的解答
insert into gru_test values (5,60,10)

select x ,sum(i),sum(o) ,max(c) from (select x,b.t,nvl(b.i,0) i,nvl(b.o,0) o,(select sum(i)-sum(o) from gru_test f where f.t <=x ) c
from
(select rownum x from all_objects
where rownum<= (select max(t) from gru_test)) a,gru_test b
where a.x=b.t(+))
group by x

X SUM(I) SUM(O) MAX(C)
-- ---------- ---------- ----------
1 50 30 20
2 45 60 5
3 0 0 5
4 0 0 5
5 120 20 105

使用道具 举报

回复
论坛徽章:
0
74#
发表于 2007-9-29 13:36 | 只看该作者
71楼的跟我犯了一样的错误
好贴顶一下.

使用道具 举报

回复
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:11奥运会纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
75#
发表于 2007-9-29 17:17 | 只看该作者
[php]

SQL> create table t_three (d date,i number,o number);

Table created

SQL> insert into t_three values(date'2000-3-1',50,30);

1 row inserted

SQL> insert into t_three values(date'2000-3-2',45,60);

1 row inserted

SQL> insert into t_three values(date'2000-3-5',60,10);

1 row inserted

SQL> select * from t_three;

D                    I          O
----------- ---------- ----------
2000-3-1            50         30
2000-3-2            45         60
2000-3-5            60         10

SQL> select d,i,o,sum(i-o) over ( order by d) from t_three;

D                    I          O SUM(I-O)OVER(ORDERBYD)
----------- ---------- ---------- ----------------------
2000-3-1            50         30                     20
2000-3-2            45         60                      5
2000-3-5            60         10                     55

SQL> insert into t_three values(date'2000-3-5',60,10);

1 row inserted

SQL> select d,i,o,sum(i-o) over ( order by d) from (
  2   select d,sum(i) i,sum(o) o from t_three group by d)
  3  /

D                    I          O SUM(I-O)OVER(ORDERBYD)
----------- ---------- ---------- ----------------------
2000-3-1            50         30                     20
2000-3-2            45         60                      5
2000-3-5           120         20                    105

SQL> select d,i,o,sum(i-o) over ( order by d) from (
  2  select a.d,sum(nvl(b.i,0)) i,sum(nvl(b.o,0)) o from t_three b,(select b+rownum-1 d from (select min(d) b,max(d) e from t_three) connect by b+rownum-1<=e) a
  3  where a.d=b.d(+) group by a.d)
  4  /

D                    I          O SUM(I-O)OVER(ORDERBYD)
----------- ---------- ---------- ----------------------
2000-3-1            50         30                     20
2000-3-2            45         60                      5
2000-3-3             0          0                      5
2000-3-4             0          0                      5
2000-3-5           120         20                    105

SQL>
[/php]

使用道具 举报

回复
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:11奥运会纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
76#
发表于 2007-9-29 17:37 | 只看该作者
认真看了下,原来是02年的哦,那时候写出来的才是高手,我写的估计大家都会了

使用道具 举报

回复
论坛徽章:
0
77#
发表于 2014-8-9 21:44
  1.                 select d.v_date,b.t_id,b.t_c       
  2.                    (  select max(last_date) over(partition by v.t_id,v.v_date) every_last_date,
  3.                      v.v_date,        
  4.                      v.t_id       
  5.                     from  
  6.                      (               
  7.                       select a.t_id,c.v_date,
  8.                         max(a.t_date) over(partition by a.t_id order by c.v_date) last_date
  9.                         from trade_test a       
  10.                          (select trunc(sysdate,'dd') - rownum v_date
  11.                           from all_objects where rownum < 101
  12.                          )c
  13.                         where c.v_date=trunc(a.t_date,'dd')(+)
  14.                        ) v
  15.                     )d,
  16.                         trade_test b
  17.                      where d.every_last_date=b.t_date
  18.                      and   d.t_id=b.t_id
复制代码

求职 : 数据库开发
论坛徽章:
41
2017金鸡报晓
日期:2017-02-08 14:09:13秀才
日期:2016-01-13 12:14:26秀才
日期:2016-01-12 11:23:27金牛座
日期:2016-01-03 20:58:56秀才
日期:2015-12-21 09:53:46秀才
日期:2015-12-21 09:48:11秀才
日期:2015-12-18 09:28:57秀才
日期:2015-12-14 15:02:13秀才
日期:2015-11-23 09:48:22秀才
日期:2016-01-21 13:37:04
78#
发表于 2014-8-12 23:09 | 只看该作者
我记得,以前的帖子里面有一个很类似的解法,方法非常的nice,我找了半天没找到。。。。。。。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
79#
发表于 2014-8-12 23:38 | 只看该作者
Skye_to_Skye 发表于 2014-8-12 23:09
我记得,以前的帖子里面有一个很类似的解法,方法非常的nice,我找了半天没找到。。。。。。。

什么问题?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表