【问题标题】:Start Stop difference grouped by quarter hour按一刻钟分组的开始停止差异
【发布时间】:2017-02-07 14:21:59
【问题描述】:

我有一个名为 time(示例 1)的 mysql 表,其中每天包含多个时间戳,它们代表登录和注销时间。

第二个表称为 time_intervals,这让我得到了示例 2 的输出。

我需要按 15 分钟切片计算此用户登录的持续时间。

示例 3 显示了我想要的结果。

示例 1(时间)

start_time      | end_time            | duration_s | user | 
----------------------------------------------------------------
2017-02-07 06:01:13 | 2017-02-07 07:03:19 | 3726       | x    |
2017-02-07 07:31:29 | 2017-02-07 08:00:00 | 3726       | x    |
2017...............   ...................   ....         .

示例 2(时间间隔)

interval_start  | interval_end        | 
--------------------------------------------
2017-02-07 06:00:00 | 2017-02-07 06:14:59 |
2017-02-07 06:15:00 | 2017-02-07 06:29:59 |
2017-02-07 06:30:00 | 2017-02-07 06:44:59 |
2017-02-07 06:45:00 | 2017-02-07 06:59:59 |
2017-02-07 07:00:00 | 2017-02-07 07:14:59 |
2017............... | 2017...............

示例 3(所需输出)

interval_start      | interval_start      | duration_s | user | 
----------------------------------------------------------------
2017-02-07 06:00:00 | 2017-02-07 06:14:59 | 826    | x    |
2017-02-07 06:15:00 | 2017-02-07 06:29:59 | 899    | x    |
2017-02-07 06:30:00 | 2017-02-07 06:44:59 | 899    | x    |
2017-02-07 06:45:00 | 2017-02-07 06:59:59 | 899    | x    |
2017-02-07 07:00:00 | 2017-02-07 07:14:59 | 199    | x    |
2017-02-07 07:15:00 | 2017-02-07 07:30:59 | 0      | x    |
2017-02-07 07:30:00 | 2017-02-07 07:44:59 | 810    | x    |

我们将不胜感激。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果time_intervals 包含所有要显示的 15 分钟间隔,则类似以下内容应该可以工作:

    SELECT ti.interval_start,
           ti.interval_end,      
           TIMESTAMPDIFF(SECOND, GREATEST(t.start_time, ti.interval_start), 
                                 LEAST(t.end_time, ti.interval_end)) AS duration_s
    FROM time_intervals AS ti
    LEFT JOIN time AS t 
       ON t.start_time <= ti.interval_end AND t.end_time >= ti.interval_start
    

    【讨论】:

    • "假设 time_intervals 包含所有 15 分钟间隔" 嗯。
    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2016-02-20
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多