假设我们有以下数据表格:

Table: call_records

| id | user_id | start_time | end_time | |----|---------|---------------------|---------------------| | 1 | 1 | 2021-01-01 10:00:00 | 2021-01-01 10:01:30 | | 2 | 1 | 2021-01-02 12:30:00 | 2021-01-02 12:30:45 | | 3 | 2 | 2021-01-05 09:00:00 | 2021-01-05 09:01:15 | | 4 | 2 | 2021-02-01 14:00:00 | 2021-02-01 14:00:30 | | 5 | 3 | 2021-02-15 16:30:00 | 2021-02-15 16:32:00 | | 6 | 3 | 2021-03-01 08:00:00 | 2021-03-01 08:00:45 |

我们可以使用以下 SQL 语句来统计每月通话分钟数:

SELECT 
    user_id,
    MONTH(start_time) AS month,
    SUM(
        CASE 
            WHEN TIMESTAMPDIFF(SECOND, start_time, end_time) < 60 
            THEN 1 
            ELSE CEILING(TIMESTAMPDIFF(SECOND, start_time, end_time)/60) 
        END
    ) AS minutes
FROM 
    call_records
GROUP BY 
    user_id, MONTH(start_time)

此 SQL 语句会将通话记录按用户和月份分组,然后计算每个组内的通话分钟数。通话时间少于 1 分钟的记录将按 1 分钟计算(使用 CEILING 函数)。

结果如下:

| user_id | month | minutes | |---------|-------|---------| | 1 | 1 | 2 | | 2 | 1 | 2 | | 2 | 2 | 1 | | 3 | 2 | 3 | | 3 | 3 | 1 |

这个结果表格显示了每个用户每个月的通话分钟数。

MySQL 统计报表:每月通话时长统计 (不满一分钟按一分钟计算)

原文地址: https://www.cveoy.top/t/topic/lyea 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录