DB2 -如何填补当天股票数据中的空白

csga3l58  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(180)

我有一些旧的日内1米棒线数据,我试图清理我正在使用的应用程序,这需要390 1米棒线分笔成交点(上午9:30-下午16:00)的日内数据,每天,每只股票。不幸的是,数据越旧,越多的差距出现,因为数据只包含实际交易在说一分钟。即:无交易=无交易量=无数据。
PCT_CHANGE由未示出的基本(CLOSE-OPEN)/OPEN*100计算,并且反映了从当前TICK的OPEN到CLOSE的百分比变化。
示例:

TICK        DATA_TICK  PCT_CHANGE  VOLUME
9:30:00 AM          
9:31:00 AM          
9:32:00 AM          
9:33:00 AM          
9:34:00 AM          
9:35:00 AM  9:35:00 AM  0       15500
9:36:00 AM  9:36:00 AM  0.06    1500
9:37:00 AM          
9:38:00 AM  9:38:00 AM  0.24    4000
9:39:00 AM  9:39:00 AM  0.2     4500
9:40:00 AM  9:40:00 AM  0.34    500
9:41:00 AM          
9:42:00 AM  9:42:00 AM  0.34    500
9:43:00 AM          
9:44:00 AM          
9:45:00 AM          
9:46:00 AM          
9:47:00 AM  9:47:00 AM  0.13    2000
9:48:00 AM  9:48:00 AM  0.13    1000
9:49:00 AM          
9:50:00 AM  9:50:00 AM  0.22    500
9:51:00 AM  9:51:00 AM  0.24    2500
9:52:00 AM  9:52:00 AM  0.24    1000
9:53:00 AM  9:53:00 AM  0.24    2000
9:54:00 AM          
9:55:00 AM  9:55:00 AM  0.13    500
9:56:00 AM          
9:57:00 AM  9:57:00 AM  0.13    2000
9:58:00 AM  9:58:00 AM  0.24    2000
9:59:00 AM  9:59:00 AM  0.24    500
10:00:00 AM 10:00:00 AM 0.13    500

因此,我希望能够用先前现有行的PCT_CHANGE值填充缺少的1 m个间隔,如果是开始分钟,则填充0(零)。所有插入值的Volume都将为0。
这些例子
上午9:41百分比变化= 0.34,体积= 0
上午9:43- 46百分比变化将全部= 0.34,体积= 0。
DB2中是否存在一些巧妙的特性、SQL语句、函数等,使我能够在存储过程中包含这些内容,以运行多只股票的10年数据?我已经尝试过了,尽管我对SQL的了解非常有限,但我所能做的最多是填补1分钟的空白。如果有多分钟的空白,我会得到糟糕的结果。
如果某个善良的灵魂能给予我一个如何实现这一点的例子,我将非常感激。
多谢了。

0pizxfdo

0pizxfdo1#

您可以执行:

select 
  t.tick, t.data_tick,
  coalesce(t.pct_change, l.pct_change, 0) as pct_change,
  coalesce(t.volume, l.volume, 0) as volume
from t
left join (
  select t.*, (
    select tick from t a where data_tick <= t.tick order by data_tick desc 
    fetch first 1 rows only
  ) as related_tick
  from t
) r on r.tick = t.tick
left join t l on l.tick = r.related_tick
order by tick

结果(出于测试目的修改数据):

TICK      DATA_TICK  PCT_CHANGE  VOLUME 
 --------- ---------- ----------- ------ 
 09:39:00             0.00        0      
 09:40:00  09:40:00   0.34        500    
 09:41:00             0.34        500    
 09:42:00  09:42:00   0.35        600    
 09:43:00             0.35        600    
 09:44:00             0.35        600    
 09:45:00             0.35        600    
 09:46:00             0.35        600    
 09:47:00  09:47:00   0.13        2000

请参阅db<>fiddle上的运行示例。

相关问题