计算大表上百分比变化的最有效方法

时间:2014-08-06 21:53:54

标签: mysql sql

我有一张包含股票信息的表格,我正在计算每个股票的百分比变化的几个数据点。计算这个的公式非常简单

(今日收盘价 - 昨日及收盘价)/昨日收盘价* 100

所以今天收盘价为12美元,昨日收盘价为10美元的股票将是

($ 12 - $ 10)/ $ 10 * 100 = 2/10 * 100 = + 20%

计算每日百分比变化很容易,但我还需要计算每周,每月,每月,每年等百分比变化。

因此,在7天前计算出前一个收盘价的一个复杂因素可能是假期或周末,或者当天股票没有交易,所以我必须在1周之前选择最近一个交易日前。

选项1 - 使用光标。

我可以选择一个股票列表,然后循环浏览它们和每个股票,从一周前获得最近的交易日并获得当天的收盘价。进行计算并更新我的表格。转到下一个股票。这似乎可行,但速度较慢。如果可能,我想尝试选项2。

选项2 - 在带有子查询的查询中执行

单个查询

UPDATE todaysdata a, historicaldata b 
   SET a.1weekpercentchange = 
          ((a.closetrade - .closetrade) / b.closetrade) * 100) 
 WHERE a.stockid = b.stockid
   AND b.tradedate = (
       SELECT max(tradedate) 
         FROM historicaldatatable 
        WHERE tradedate <= date_sub(now(), interval 7 day) 
        WHERE stockid=a.stockid);

todaysData表包含大约15000条记录。每个股票一个。历史数据包含大约50万条记录,每条库存有多条记录。例如,Apple在历史表中每年有200行* x年的数据。

我发现选项2的运行速度非常慢。有没有更快的方法来执行此查询?

0 个答案:

没有答案