【问题标题】:Mysql timestampdiff sum between overlapped intervals重叠间隔之间的Mysql timestampdiff总和
【发布时间】:2017-04-03 17:13:49
【问题描述】:

我的表结构如下:

+----+---------------------+---------------------+  
| id | created_at          | closed              |  
+----+---------------------+---------------------+  
|  1 | 2017-04-03 04:00:00 | 2017-04-03 04:30:00 |  
|  2 | 2017-04-03 04:25:00 | 2017-04-03 04:35:00 |  
+----+---------------------+---------------------+  

在我的真实 SQL 查询中,我使用 timestampdiff 来计算时间戳字段中两个日期之间的差异。如果所有记录的ctreated_atclosed_at 以不同的时间间隔开始,则没有问题,因此我可以按如下方式获取所有行的时间消耗:

SELECT SUM(timestampdiff(SECOND, created_at, closed_at)) as TotalTime FROM table

我的问题如上表所示,时间间隔交叉。上面的查询将得到900,但我应该得到600

我尝试过类似的方法:

SELECT timestampdiff(
                    MINUTE,
                    a.created_at,
                    (SELECT max(b.closed) from times as b WHERE b.created_at < a.closed)
                    ) as periods
FROM `times` as a

结果是:

+---------+
| periods |
+---------+
|      35 |
|      10 |
+---------+

在这里,我只想要第一个结果,它代表重叠时段的净时间。将MAX 与上一个查询一起使用应该返回第一条记录,但如果表变为:

+----+---------------------+---------------------+
| id | created_at          | closed              |
+----+---------------------+---------------------+
|  1 | 2017-04-03 04:00:00 | 2017-04-03 04:30:00 |
|  2 | 2017-04-03 04:25:00 | 2017-04-03 04:35:00 |
|  3 | 2017-04-03 05:00:00 | 2017-04-03 05:15:00 |
+----+---------------------+---------------------+

以上查询返回:

+---------+
| periods |
+---------+
|      35 |
|      10 |
|      15 |
+---------+

再次在这里,我不想要第二条记录,因为它描述了之前在第一条记录中计算的周期。实际上,我不知道在 MySQL 中是否有可能(对于上面的示例)仅获取两条记录甚至三条记录,但第二条记录为空、0、负值等,以便与其他真正的值区分开来。

【问题讨论】:

  • 我认为在mysql中是不可能的。

标签: mysql sql timestamp intervals


【解决方案1】:

您需要按每小时的时间和最大的时间差进行分组。

SELECT max(timestampdiff(
                    MINUTE,
                    a.created_at,closed)  as periods
FROM `times` as a group by hour(created_at)

现在您将根据您的要求获得结果。

【讨论】:

  • 此解决方案有效,但当另一个独立间隔发生在第一个间隔的同一小时内时,它会受到限制。假设表的第三行有created_at,值为2017-04-03 04:55:00
  • 那个时候你想得到什么?
  • 它不限于指定的时间,这个想法类似于事件日志表,我想确定具有重叠周期的事件所占用的周期以及其他独立周期要么有子周期要么不是。 @公羊
猜你喜欢
  • 1970-01-01
  • 2017-06-09
  • 2020-05-06
  • 2020-02-19
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多