ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 593|回复: 19

[SQL] 【SQL】求教对一个表怎么写一个迭代查询SQL语句

[复制链接]
认证徽章
论坛徽章:
2
秀才
日期:2017-06-29 10:05:55秀才
日期:2017-06-29 10:05:55
发表于 2017-7-16 23:09 | 显示全部楼层 |阅读模式
PS:问题在红色字体部分。
———————————————————————————————
有一个表test,数据和建表语句如下:
CREATE TABLE TEST
(
       ID NUMBER,
       VALUE NUMBER
);

INSERT INTO Test VALUES (1, 11);
INSERT INTO Test VALUES (2, 34);
INSERT INTO Test VALUES (3, 28);
INSERT INTO Test VALUES (4, 14);
INSERT INTO Test VALUES (5, 8);
INSERT INTO Test VALUES (6, 25);
INSERT INTO Test VALUES (7, 17);
INSERT INTO Test VALUES (8, 13);
INSERT INTO Test VALUES (9, 19);
INSERT INTO Test VALUES (10, 20);
INSERT INTO Test VALUES (11, 24);
INSERT INTO Test VALUES (12, 12);
INSERT INTO Test VALUES (13, 11);
INSERT INTO Test VALUES (14, 13);
INSERT INTO Test VALUES (15, 23);
INSERT INTO Test VALUES (16, 17);
INSERT INTO Test VALUES (17, 27);
INSERT INTO Test VALUES (18, 6);
INSERT INTO Test VALUES (19, 9);
INSERT INTO Test VALUES (20, 17);
COMMIT;


表数据
IDValue
1
11
2
34
3
28
4
14
5
8
6
25
7
17
8
13
9
19
10
20
11
24
12
12
13
11
14
13
15
23
16
17
17
27
18
6
19
9
20
17


怎么计算一个EMA = 0.5 *(当前的Value -  前一个移动平均线P) + 前一个移动平均线P
对于第一个(ID)前一个移动平均线为当前值(11);
【问题】这个EMA的查询SQL怎么写?


希望得出的查询数据如下:
IDValueEMA
1
11
11
2
34
22.5
3
28
25.25
4
14
19.625
5
8
13.8125
6
25
19.40625
7
17
18.20313
8
13
15.60156
9
19
17.30078
10
20
18.65039
11
24
21.3252
12
12
16.6626
13
11
13.8313
14
13
13.41565
15
23
18.20782
16
17
17.60391
17
27
22.30196
18
6
14.15098
19
9
11.57549
20
17
14.28774

谢谢!

论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
发表于 2017-7-17 05:45 来自手机 | 显示全部楼层
分析函数,好像12c还有其他的

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
发表于 2017-7-17 05:45 来自手机 | 显示全部楼层
本帖最后由 〇〇 于 2017-7-17 09:25 编辑

分析函数,好像12c还有其他的

12c的这个功能与lz的问题无关
https://www.pythian.com/blog/sql ... hing-in-oracle-12c/

使用道具 举报

回复
论坛徽章:
482
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21
发表于 2017-7-17 07:39 | 显示全部楼层
select *
  from test
model return updated rows
dimension by (id)
measures (value,0 ema)
rules (
  ema[any] order by id=decode(cv(id),1,value[cv()],0.5*(value[cv()]-ema[cv()-1])+ema[cv()-1])
);


        ID      VALUE        EMA
---------- ---------- ----------
         1         11         11
         2         34       22.5
         3         28      25.25
         4         14     19.625
         5          8    13.8125
         6         25   19.40625
         7         17  18.203125
         8         13 15.6015625
         9         19 17.3007813
        10         20 18.6503906
        11         24 21.3251953
        12         12 16.6625977
        13         11 13.8312988
        14         13 13.4156494
        15         23 18.2078247
        16         17 17.6039124
        17         27 22.3019562
        18          6 14.1509781
        19          9  11.575489
        20         17 14.2877445

20 rows selected.

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
发表于 2017-7-17 09:18 | 显示全部楼层

使用道具 举报

回复
论坛徽章:
482
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21
发表于 2017-7-18 02:10 | 显示全部楼层
〇〇 发表于 2017-7-17 09:18
http://www.itpub.net/thread-1838303-1-1.html

你认为分析函数能够实现楼主的需求?试试看?

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
发表于 2017-7-18 07:30 | 显示全部楼层
newkid 发表于 2017-7-18 02:10
你认为分析函数能够实现楼主的需求?试试看?

cte应该可以

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
发表于 2017-7-18 08:17 | 显示全部楼层
用关联写出来了
SQL> select a.id, sum(power(0.5,a.id-decode(b.id,1,2,b.id)+1)*b.value)s from test a,test b where b.id<= a.id group by a.id order by 1;

        ID          S
---------- ----------
         1         11
         2       22.5
         3      25.25
         4     19.625
         5    13.8125
         6   19.40625
         7  18.203125
         8 15.6015625
         9 17.3007813
        10 18.6503906
        11 21.3251953
        12 16.6625977
        13 13.8312988
        14 13.4156494
        15 18.2078247
        16 17.6039124
        17 22.3019562
        18 14.1509781
        19  11.575489
        20 14.2877445

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
16
优秀写手
日期:2014-02-27 06:00:13弗兰奇
日期:2017-07-04 09:16:01秀才
日期:2017-06-29 10:16:48乌索普
日期:2017-05-26 08:58:24娜美
日期:2017-05-18 16:07:23ITPUB15周年纪念
日期:2017-05-02 15:22:36妮可·罗宾
日期:2017-04-06 10:06:19处女座
日期:2016-03-10 09:03:26白羊座
日期:2015-10-09 16:42:50慢羊羊
日期:2015-06-15 21:49:18
发表于 2017-7-18 08:19 | 显示全部楼层
CTE
  1. WITH T1(ID,VALUE,EAM) AS
  2. (SELECT ID, VALUE, VALUE
  3.   FROM   TEST
  4.   WHERE  ID = 1
  5.   UNION ALL
  6.   SELECT T.ID, T.VALUE, 0.5 * (T.VALUE - T1.EAM) + T1.EAM
  7.   FROM   T1, TEST T
  8.   WHERE  T.ID = T1.ID + 1)
  9. SELECT *
  10. FROM   T1
复制代码

使用道具 举报

回复
论坛徽章:
482
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21
发表于 2017-7-18 09:46 | 显示全部楼层
〇〇 发表于 2017-7-18 08:17
用关联写出来了
SQL> select a.id, sum(power(0.5,a.id-decode(b.id,1,2,b.id)+1)*b.value)s from test a, ...

可以去掉关联吗?
MODEL能做的事情,递归WITH都能做出来。

使用道具 举报

回复

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

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月30日前

活动链接>>
TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表