俺在试手小例子, 就是把股票行情的数据全导入oracle中,
表中字段,
NO: 代码
DATES: 日期
OPEN: 开盘价
MAX: 最高价
MIN:最低价
CLOSE:收盘价YES:昨天的收盘价,(为了好做分析, 加了这个字段)现在的问题是, 数据文件中只有最前面的几个字段, 而没有我那个YES字段的值,所以都是空的
当然了, 这个值也就等于它前面一条记录的CLOSE的值,
因为不知道怎么发图, 这样说可能说不清楚, 发图很直观了
请教下, 这里有没SQL写或者其它什么的, 可以直接更新最后那个字段的?数据文件是几千个文本文件,400多万条记录吧
我用的JDBC做, 读取文件再插入数据库中, 试了好几次, 现在的时间也差不多半个钟左右
用HIBERNATE,试了几次,都没成功, 到100万条左右就出错了, 时间也超长,
这里有没可以再优化的呢
表中字段,
NO: 代码
DATES: 日期
OPEN: 开盘价
MAX: 最高价
MIN:最低价
CLOSE:收盘价YES:昨天的收盘价,(为了好做分析, 加了这个字段)现在的问题是, 数据文件中只有最前面的几个字段, 而没有我那个YES字段的值,所以都是空的
当然了, 这个值也就等于它前面一条记录的CLOSE的值,
因为不知道怎么发图, 这样说可能说不清楚, 发图很直观了
请教下, 这里有没SQL写或者其它什么的, 可以直接更新最后那个字段的?数据文件是几千个文本文件,400多万条记录吧
我用的JDBC做, 读取文件再插入数据库中, 试了好几次, 现在的时间也差不多半个钟左右
用HIBERNATE,试了几次,都没成功, 到100万条左右就出错了, 时间也超长,
这里有没可以再优化的呢
解决方案 »
- OACLE判断表是否存在,如何生成新表?
- 无法加载 DLL“OraOps10.dll”: 找不到指定的程序。 (异常来自 HRESULT:0x8007007F)。错误
- 高手帮忙看看SQL中得时间转换问题,谢谢了
- 关于set serveroutput 默认关闭问题,如何默认是on状态
- ORACLE 循环的问题,请指点。
- 菜鸟问题:在java里怎么取plsql表的返回值?
- PB4如何访问oracle8.16呢?(在线等)
- 初学者提问:建好oracle数据库后如何建立用户,表?及在哪里建呀?
- 关于IMP的问题
- oracle 管理用户密码怎么修改
- 新手提问:一次无法得到时两个select结果?
- 数据库整体复制问题
UPDATE stock_data t
SET t.yes =
(SELECT p_close
FROM (SELECT no,
lag(CLOSE) over(PARTITION BY no ORDER BY dates) p_close
FROM stock_data) a
WHERE a.no = t.no);
看了你给的, 我去学习了LAG函数,觉得还是LEAD适合,它先按no分组,再按 dates排序
以下是我写的,update stock s set s.yes = (select tyes from (
select t.id tid,
lead(t.close,1, t.open) over(partition by t.no order by t.dates asc) tyes
from stock t ) a
where s.id=a.tid)只是, 问题是, 这个时间超长, 我昨晚放那让它执行, 早上出门前, 还有执行,
7个多小时过去了, 还没完,我有试过, 先只执行1小段, 就加 where s.id<10, 这里都至少10分钟过去了, 也没完,
我只执行这里
select t.id tid,
lead(t.close,1, t.open) over(partition by t.no order by t.dates asc) tyes
from stock t
也是好久没出结果,
我有加NO索引, 甚至close, dates也都有加, 可还是这么慢,
还有没提示效率的呢,
select t.id tid,
lead(t.close,1, t.open) over(partition by t.no order by t.dates desc) tyes
from stock t where t.id between ? and ?) a
where s.id=a.tid) where s.id=?自我总结, 重点后面一句where s.id=?, 和中间的where t.id between ? and ?, 在这里卡了好久采用for循环, 刚办公室电脑上测试下了, 大概一秒钟能更新一万条, 哎, 家里的电脑, 执行了30多个小时, 还没完,
这下就好了, 呵呵,