mysql在时间戳中两个表的重叠

我在MySQL中有两个表.在每个表中,保存了具有其MAC地址和状态区域信息的设备.

这些状态确实在某些时间戳记(startTime,endTime)及其持续时间(endTime-startTime)处开始和结束,并且是由某些ID引起的.

现在,我想找到某些事件“移动”和“负载”之间的重叠部分,这些重叠部分以天为单位,如下所示:

sum of time, when movement took place (value in the fiddle: 421)
sum of time, when load took place (value in the fiddle: 520)
sum of time, when movement and load took place (value in the fiddle: 391)

查询结果应如下所示:

ID                  DATE                            ALL_MOVEMENT    ALL_LOAD    LOAD_MOVEMENT
00:50:c2:63:10:1a   October, 29 2012 00:00:00+0000  421             520         391
00:50:c2:63:10:1a   February, 22 2013 00:00:00+0000 421             520         391
00:50:c2:63:10:1b   February, 22 2013 00:00:00+0000 181             220         181

在这里准备了小提琴:http://sqlfiddle.com/#!2/c210c

更新:在这里可以看到一个小提琴,它以不同的表结构提供了我想要的东西:

http://sqlfiddle.com/#!2/31b94/1

解决方法:

我不太了解数据集与结果集之间的关系,但在我看来,您或多或少需要这样的东西…

 SELECT m.id
      , DATE(FROM_UNIXTIME(m.starttime))Date,SUM(m.duration) all_movement
      , SUM(l.duration) all_load
   FROM move_table m
   JOIN load_table l
     ON l.id = m.id
    AND l.endtime > m.starttime
    AND l.starttime < m.endtime
  GROUP 
     BY m.id
      , DATE(FROM_UNIXTIME(m.starttime));
 +-------------------+------------+--------------+----------+
 | id                | Date       | all_movement | all_load |
 +-------------------+------------+--------------+----------+
 | 00:50:c2:63:10:1a | 2012-10-29 |          391 |      520 |
 | 00:50:c2:63:10:1a | 2013-02-22 |          391 |      520 |
 | 00:50:c2:63:10:1b | 2013-02-22 |          181 |      220 |
 +-------------------+------------+--------------+----------+

顺便说一句,在这种情况下,持续时间似乎是多余的,因为(例如)SUM(m.endtime-m.starttime)将为您提供相同的结果.

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能