在MySQL中选择每2分钟记录一次的最新记录
我想将大约8000个文件(每个文件包含不同股票的每日股价)读入一个表中,并在每个2分钟间隔内选择最新价格,如果间隔内没有可用记录,则写入一个空值。我的想法是添加一个名为bucketNumber的列来指示记录属于哪个间隔,创建另一个表,其中包含一列值1、2、…、195,重复8000次,然后将两个表合并。最后,为具有相同bucketNumber的记录选择时间戳最大的记录在MySQL中选择每2分钟记录一次的最新记录,mysql,large-data-volumes,Mysql,Large Data Volumes,我想将大约8000个文件(每个文件包含不同股票的每日股价)读入一个表中,并在每个2分钟间隔内选择最新价格,如果间隔内没有可用记录,则写入一个空值。我的想法是添加一个名为bucketNumber的列来指示记录属于哪个间隔,创建另一个表,其中包含一列值1、2、…、195,重复8000次,然后将两个表合并。最后,为具有相同bucketNumber的记录选择时间戳最大的记录 这是做这项工作的好方法吗?如果是,那么如何高效地生成一个表,其中一列值为1、2、…、195,重复8000次。下面的查询将返回一列从
这是做这项工作的好方法吗?如果是,那么如何高效地生成一个表,其中一列值为1、2、…、195,重复8000次。下面的查询将返回一列从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分钟的间隔内循环,并从间隔内时间最长的记录中选择价格。您可以包含开始时间和结束时间的参数,这将提供更通用的解决方案