几天来,我一直在尝试解决一个看似简单的问题,但无论我采取哪种尝试,我似乎都无法完美地解决它。
我有两个简单的表,每个表都有 3 个列:call_date、call_time、caller_id,它们都是不言自明的。
第一个表包含呼入电话,第二个表包含呼出电话。
接到呼入电话后,应在 30 分钟内拨打相应的呼出电话。到目前为止一切顺利,这里没有问题,但这有点棘手:
- 入站表中可以有来自同一个 caller_id 的多个入站呼叫。
- 只有与前一个相关呼叫至少有 30 分钟距离的呼叫才被视为有效呼叫。因此,当某人打了四次电话时,比如说在 08:00、08:15、08:31 和 09:31,有 3 个有效的电话:08:00、08:31 和 09:31。因此,在每次有效通话后,您必须再次等待 30 分钟才能使下一次通话有效。
- 呼出表还可以包含对同一号码的无、一个或多个呼叫,所有这些呼叫都必须尽可能与呼入呼叫匹配。
我尝试了各种方法来解决这个问题,但它们都不是 100% 准确,总是留下一个或多个呼叫不匹配或未标记为有效等,我的头开始有点旋转。
现在,我从入站呼叫表中构建了一个巨大的表,为 previous_calltime 和 next_calltime 添加了许多列,这样我就可以计算时间戳之间的分钟数。我采取的第二种方法是创建单独的表格,其中每个号码每天的第一次和最后一次通话等,但总有一些事情不会加起来。
这是我的数据表的示例,入站和出站是相同的。
+----+-----------+----------+----------+
| id | call_date | call_time|caller_id
+----+-----------+----------+----------+
| 1 | 2013-06-01| 08:00 | 12345
+----+-----------+----------+----------+
| 2 | 2013-06-01| 08:20 | 12345
+----+-----------+----------+----------+
| 3 | 2013-06-01| 08:30 | 12345
+----+-----------+----------+----------+
| 4 | 2013-06-01| 08:32 | 555-999
+----+-----------+----------+----------+
| 5 | 2013-06-01| 08:47 | 555-999
+----+-----------+----------+----------+
也许有人可以为我指明一个粗略的方向,我应该采取哪种方法。任何建议表示赞赏。
Ps 我在这里尝试 100% 基于 MySQL 的方法,但理论上我也可以使用 PHP,以防有人认为在纯 SQL 中这样做很痛苦,而使用 PHP 可能更容易。