Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中选择每2分钟记录一次的最新记录_Mysql_Large Data Volumes - Fatal编程技术网

在MySQL中选择每2分钟记录一次的最新记录

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

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


这是做这项工作的好方法吗?如果是,那么如何高效地生成一个表,其中一列值为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分钟的间隔内循环,并从间隔内时间最长的记录中选择价格。您可以包含开始时间和结束时间的参数,这将提供更通用的解决方案