Oracle 分析函数Merge 案例
2015-02-14 21:31
337 查看
-- Start
假设现在有下面这个表用来存放股票的价格,我们需要保存一个月的历史记录。
由于这个表的数据量非常大,导致我们想取最新的价格非常慢,于是我们有下面这个表存放最新价格。
现在问题来了,怎么把 price_history 的最新价格搞到 price 表里呢?也许你想说根据 price_date,但是 price_date 并不一定是当前日期,而且我们还需要根据 rank 排序,怎么办?实在不行,一条一条处理?来吧,是时候展现 Oracle 强大功能的时候了。
怎么样?没看懂?点击此处查看更多详情 Oracle merge 语句 和Oracle
分析函数。
--更多参见:Oracle SQL 精萃
-- 声明:转载请注明出处
-- Last edited on 2015-02-14
-- Created by ShangBo on 2015-02-14
-- End
假设现在有下面这个表用来存放股票的价格,我们需要保存一个月的历史记录。
CREATE TABLE price_history ( security_id NUMBER(10, 0), price NUMBER(10, 4), price_date DATE, rank NUMBER(2, 0) );
由于这个表的数据量非常大,导致我们想取最新的价格非常慢,于是我们有下面这个表存放最新价格。
CREATE TABLE price ( security_id NUMBER(10, 0), price NUMBER(10, 4) );
现在问题来了,怎么把 price_history 的最新价格搞到 price 表里呢?也许你想说根据 price_date,但是 price_date 并不一定是当前日期,而且我们还需要根据 rank 排序,怎么办?实在不行,一条一条处理?来吧,是时候展现 Oracle 强大功能的时候了。
MERGE INTO price p USING ( SELECT security_id, price FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY security_id ORDER BY price_date DESC, rank DESC) AS ROW_ID, security_id, price FROM price_history ) WHERE ROW_ID = 1 ) ph ON (p.security_id = ph.security_id) WHEN MATCHED THEN UPDATE SET p.price = ph.price WHEN NOT MATCHED THEN INSERT VALUES (ph.security_id, ph.price);
怎么样?没看懂?点击此处查看更多详情 Oracle merge 语句 和Oracle
分析函数。
--更多参见:Oracle SQL 精萃
-- 声明:转载请注明出处
-- Last edited on 2015-02-14
-- Created by ShangBo on 2015-02-14
-- End
相关文章推荐
- Oracle分析函数七——分析函数案例
- Oracle 分析函数案例
- Oracle分析函数七——分析函数案例
- Oracle开发之SQL语句案例—分析函数的使用
- Oracle分析函数七——分析函数案例
- oracle心得2--单行函数理论讲解与案例分析.doc
- oracle的存储过程和存储函数深入分析和案例
- Oracle分析函数七——分析函数案例
- Oracle开发之SQL语句案例—分析函数的使用
- Oracle分析函数七——分析函数案例
- Oracle分析函数的使用
- Oracle 9i 分析函数参考手册(转)
- Oracle 分析函数的使用
- Oracle 分析函数的使用
- Oracle 9i 分析函数参考手册
- Oracle 9i 分析函数参考手册
- oracle 9i 分析函数参考手册
- Oracle 9i 分析函数参考手册(转)
- 使用Oracle的分析函数ROW_NUMBER、DENSE_RANK、RANK
- Oracle 分析函数使用介绍