【发布时间】:2013-06-27 17:56:06
【问题描述】:
我有我的 Widget 销售人员的通话记录。记录客户记录中的每次点击。员工每天可能会多次访问同一个客户帐户,因此在一天中的不同时间,同一记录 ID 下可能会有数十次连续点击。
例子:
recordID userID date_event
33450 321 2013-06-20 16:22:02
33450 321 2013-06-20 16:22:02
33450 321 2013-06-20 16:22:24
33450 321 2013-06-20 16:22:24
22222 321 2013-06-20 16:22:53
22222 321 2013-06-20 16:22:54
12345 321 2013-06-20 16:23:43
12345 321 2013-06-20 16:23:44
12345 321 2013-06-20 16:24:00
12345 321 2013-06-20 16:24:05
12345 321 2013-06-20 16:24:05
12345 321 2013-06-20 18:16:09
12345 321 2013-06-20 18:16:09
33450 321 2013-06-20 18:33:24
33450 321 2013-06-20 18:35:11
33450 321 2013-06-20 18:36:55
12345 321 2013-06-20 19:01:14
98765 321 2013-06-20 19:02:43
在上面的数据集中,我有 6 组访问权限。
first last duration(seconds)
33450 2013-06-20 16:22:02 2013-06-20 16:22:24 22
22222 2013-06-20 16:22:30 2013-06-20 16:22:54 24
12345 2013-06-20 16:23:43 2013-06-20 18:16:09 6746
33450 2013-06-20 18:33:24 2013-06-20 18:36:55 211
12345 2013-06-20 19:01:14 2013-06-20 19:01:14 0
98765 2013-06-20 19:02:43 2013-06-20 19:02:43 0
持续时间是一个估计值,而不是眼睛注视记录的实际时间。我无法检测到员工何时积极使用此应用程序,或者他们何时使用客户端工具在另一个应用程序或网站中查找数据。
表结构为:
CREATE TABLE IF NOT EXISTS `record_log` (
`event_id` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(5) DEFAULT NULL,
`recordID` int(10) DEFAULT NULL,
`date_event` datetime DEFAULT NULL,
PRIMARY KEY (`event_id`),
KEY `userID` (`userID`),
KEY `date_event` (`date_event`),
KEY `recordID` (`recordID`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
构造查询以返回第二个数据集的最佳方法是什么?这可以在一个查询中完成而不使用太多循环吗?在给定的一天,我可能会访问数千条记录。
【问题讨论】:
-
你有 auto_increment ID 吗?你的记录是如何组合在一起的?当记录 ID 发生变化时,组会发生变化吗?
-
是的 - auto_increment 是“event_id”。记录将按记录 ID 分组,但要注意的是,我需要的不仅仅是给定时间段内每个记录 ID 的所有持续时间的简单总计。在一天中可以多次访问相同的记录 ID。通常会有多组连续的活动。或者,一个recordID 可能在一天中只被访问过一次。我试图在上面的数据中解释并展示这一点。
标签: mysql datetime select optimization gaps-and-islands