MySQL 统计报表:每月通话时长统计 (不满一分钟按一分钟计算)
假设我们有以下数据表格:
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 |
这个结果表格显示了每个用户每个月的通话分钟数。
原文地址: https://www.cveoy.top/t/topic/lyea 著作权归作者所有。请勿转载和采集!