MySQL查询以识别并发访问/使用

时间:2013-05-01 16:55:56

标签: mysql

我正在尝试大致了解服务器过去的负载;我想利用一个日志表来估计并发访问,但我却陷入了构建查询的困境。表格如下:

仅供参考:我没有设计/创建这个表,接管了一个丑陋的数据库:(

CREATE TABLE `user_access_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `oem_id` varchar(50) NOT NULL,
  `add_date` datetime NOT NULL,
  `username` varchar(36) NOT NULL,
  `site_id` int(5) NOT NULL,
  `card_id` int(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$

表格数据:

---------------------------------------------------------------------------
| id        | add_date            | username          | site_id | card_id |
---------------------------------------------------------------------------
| 185818901 | 2012-12-25 03:01:04 | 1944E9745A9CE91   | 4       | 27273   |
| 185818900 | 2012-12-25 03:01:04 | EA5902C8115C9FF   | 1       | 27238   |
---------------------------------------------------------------------------

这可能是牵强附会,或者可能不合逻辑......但是,我试图从add_date计算每秒的唯一用户名(请记住数据跨越几个月)。

有什么想法吗?

谢谢, 凯特

1 个答案:

答案 0 :(得分:0)

听起来你只需要使用COUNTDATEFORMAT

select DATE_FORMAT(add_date, '%Y-%m-%d %H:%i:%s'), 
    count(distinct username) usercount
from player_user_video
group by DATE_FORMAT(add_date, '%Y-%m-%d %H:%i:%s')

SQL Fiddle Demo

根据数据的存储方式,您可能不需要使用DATEFORMAT。但是这将返回按日期,小时,分钟和秒分组的不同用户名的计数。我认为这是你想要完成的。如果您要确定哪个秒或小时的流量最多,则可以使用SECOND(add_date)。取决于您的确切需求(小提琴包括两个例子)。