mysql - 查找并行时间的动作记录
问题描述
我有一个大约 700 万行的呼叫数据记录表 (CDR),每行包含一个呼叫记录:唯一标识符、呼叫者号码、接收号码、answer_datetime 和 duration_in_seconds
我正在寻找一种有效的方法来查找由同一接收号码并行处理的呼叫。我尝试的任何查询都花费了太长时间
表结构:
CREATE TABLE `cdrs` (
`global_identifier` varchar(32) DEFAULT NULL,
`caller_num` int(14) DEFAULT NULL,
`receiving_num` int(14) DEFAULT NULL,
`call_answer` datetime DEFAULT NULL,
`call_duration` int(7) DEFAULT NULL,
KEY `caller_num` (`caller_num`),
KEY `receiving_num` (`receiving_num`),
KEY `call_answer` (`call_answer`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
我已经尝试过的查询:
SELECT
DATE_FORMAT(call_answer,'%Y%m') AS Ym,
b_num,
COUNT(*) AS cnt,
SUM(call_duration) / 60 AS c_dur
FROM
(
SELECT
ycdr.*
FROM
cdrs ycdr
INNER JOIN cdrs ycdr2 ON
ycdr2.receiving_num = ycdr.receiving_num
AND ycdr2.caller_num != ycdr.caller_num
WHERE
ycdr2.call_answer BETWEEN
ycdr.call_answer AND ycdr.call_answer
AND ycdr.call_answer >= '2015-01-01'
AND ycdr.call_answer < '2015-01-05'
GROUP BY
ycdr.global_identifier
) a
;
解释结果:
解决方案
推荐阅读
- arrays - 子类化 NSArray
- angular - 将@coreui/coreui-pro 更新到 3.4.2 版本后出现错误
- pine-script - 我如何在我的代码 pine 脚本中更改我的时间范围
- azure - 如何在 Azure 上的 powershell 中获取 VmSize
- android - Django-react native:请求失败,状态码为 400
- python - 在 django rest 框架中检索单个感兴趣的对象而不是 Blog.objects.all()
- tensorflow - 在 TensorFlow 2.4.1 中将 PRelu 激活实现为函数
- httpclient - dotnet 5 如何在 HttpClient 中使用 Windows 身份验证凭据
- r - 在闪亮仪表板标题的中心添加标题和副标题
- javascript - 全局调用异步函数时出错:“等待仅在异步函数和模块的顶层主体中有效”?