繁体   English   中英

MySQL将时间范围分成较小的块

[英]MySQL Split Time Ranges into Smaller Chunks

当开发人员上周辞职时,我最近的任务是完成一个PHP / MySQL网络应用程序。 我不是MySQL专家,所以如果这是一个非常简单的问题,我深表歉意。 我已经搜寻了两天的大部分时间,试图找到相对简单的解决方案,如下所示。

简而言之问题:
我有一个充满开始和结束日期时间(GMT -5)和UNIX时间戳值的MySQL表,该值涵盖不规则长度的持续时间,需要将它们拆分/分割/划分为更规则的时间块(5分钟)。 如果有意义的话,我不会计算每个时间块/存储桶/时间段的行条目数。

数据示例:

started, ended, started_UNIX, ended_UNIX  
2010-10-25 15:12:33, 2010-10-25 15:47:09, 1288033953, 1288036029  

我希望得到的是:

2010-10-25 15:12:33, 2010-10-25 15:15:00, 1288033953, 1288037700  
2010-10-25 15:15:00, 2010-10-25 15:20:00, 1288037700, 1288038000  
2010-10-25 15:20:00, 2010-10-25 15:25:00, 1288038000, 1288038300  
2010-10-25 15:25:00, 2010-10-25 15:30:00, 1288038300, 1288038600  
2010-10-25 15:30:00, 2010-10-25 15:35:00, 1288038600, 1288038900  
2010-10-25 15:35:00, 2010-10-25 15:40:00, 1288038900, 1288039200  
2010-10-25 15:40:00, 2010-10-25 15:45:00, 1288039200, 1288039500  
2010-10-25 15:45:00, 2010-10-25 15:47:09, 1288039500, 1288039629  

如果您有兴趣,以下是该应用的快速入门以及为什么我需要这些数据:
应用程序概述:当应用程序的输入引脚接地时,该应用程序会接收由基本传感器设备生成的非常简单的POST请求,该请求会将INSERT查询提交到MySQL记录时间戳(启动时)的数据库。 当输入引脚从接地状态返回时,设备将提交不同的POST请求,这将使PHP应用程序提交UPDATE查询,并在其中插入修改时间时间戳记(结束)。

我的雇主最近将定期报告的计量单位从每天 “开”的秒数 更改“每5分钟间隔”的秒数 我已经制定了我认为可行的解决方案,但是当我在纸上看时,这就像Rube Goldberg在MySQL中构建的噩梦一样,所以就解决了。

关于如何将这些跨度分成5分钟的块有什么建议吗? 我会优先选择将其全部保留在MySQL中,尽管我会提出任何建议。 感谢您提出的任何建议。

再次致歉,我对此深表歉意。
如果将来我对SO集体意识提出任何其他问题,我会尝试用更好的措词。 我们将竭诚欢迎任何帮助。

谢谢,
内仁

与其尝试转换很好且密集表示的原始数据,不如编写一个检索模块,该模块读取原始数据并将其内部转换为所需的表示形式。 我想它可以将其写回新表中,但是有什么理由不能直接从程序中生成报告吗?

这类似于“空白行”问题,如果您确实必须更改数据,则可以使用数字表来解决。

在您的数据库中,创建一个称为数字的表,并插入数字0到9:

CREATE TABLE  numbers (
   num int(10) unsigned NOT NULL,
   PRIMARY KEY (num)
 ); 

数字表可用于生成整数序列,这些整数序列可以转换为时间。 例如,要获得从15:15到15:45的序列:

   SELECT ADDDATE('2010-10-25 15:15:00', INTERVAL 5*`i` MINUTE) FROM (
       SELECT 10*n1.num + n2.num AS i
        FROM numbers n1 CROSS JOIN numbers n2) nums
     WHERE i <= TIME_TO_SEC(TIMEDIFF('15:45', '15:15'))/(5*60)
     ORDER BY i ASC;

分两步制作数据。 首先,创建缺少的行。 然后将原始行更新为5分钟或更短的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM