2

我想将大约 8000 个文件读取到一个表中,每个文件都包含不同股票的每日股价,然后选择每 2 分钟间隔内的最新价格,如果间隔内没有可用记录,则写入 Null。我的想法是添加一个名为 bucketNumber 的列来指示记录属于哪个区间,创建另一个表,其中包含一列值 1、2、...、195,重复 8000 次,然后连接这两个表。最后为具有相同bucketNumber的记录选择时间戳最大的记录。

这是完成工作的好方法吗?如果是,那么如何有效地生成一列值 1、2、...、195 重复 8000 次的表。

4

2 回答 2

0

似乎存储过程将是最简单的方法。只需遍历每 2 分钟的时间间隔,然后从该时间间隔内具有最长时间的记录中选择价格。您可以包含开始时间和结束时间的参数,这将提供更通用的解决方案。

于 2012-12-31T05:14:31.790 回答
0

这是一个查询,它将返回一列从 1 到 8000 的整数值

SELECT thousands.d*1000 + hundreds.d*100 + tens.d*10 + ones.d + 1 AS num
  FROM ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) ones
 CROSS      
  JOIN ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) tens
 CROSS
  JOIN ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) hundreds
 CROSS
  JOIN ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) thousands
HAVING num <= 8000
ORDER BY num
于 2012-12-31T04:12:27.720 回答