选择MySQL中每2分钟间隔的最新记录

时间:2012-12-31 03:32:16

标签: mysql large-data-volumes

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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