【问题标题】:Select the latest recored in each 2-minute interval in MySQLMySQL中每2分钟间隔选择最新记录
【发布时间】:2012-12-15 08:23:16
【问题描述】:
我想读取大约 8000 个文件,每个文件都包含不同股票的每日股价,并在一个表中选择每 2 分钟间隔内的最新价格,如果间隔内没有可用记录,则写入 Null。我的想法是添加一个名为 bucketNumber 的列来指示记录属于哪个区间,创建另一个表,其中包含一列值 1、2、...、195,重复 8000 次,然后连接这两个表。最后为bucketNumber相同的记录选择时间戳最大的记录。
这是完成这项工作的好方法吗?如果是,那么如何高效地生成一列值 1、2、...、195 重复 8000 次的表。
【问题讨论】:
标签:
mysql
large-data-volumes
【解决方案1】:
这是一个查询,它将返回一列从 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
【解决方案2】:
似乎存储过程是最简单的方法。只需遍历每 2 分钟的间隔,然后从该间隔内具有最长时间的记录中选择价格。您可以包含开始时间和结束时间的参数,这将提供更通用的解决方案。