1

サーバーの過去の負荷を大まかに把握しようとしています。ログ テーブルを使用して同時アクセスを見積もりたいのですが、クエリの作成に行き詰まっています。表は次のとおりです。

参考までに: 私はこのテーブルを設計/作成したのではなく、醜いデータベースを乗っ取りました:(

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秒ごとに一意のユーザー名を数えようとしています(データが数か月に及ぶことに注意してください)。

何かご意見は?

ありがとう、ケイト

4

1 に答える 1

0

COUNTandを使用するだけでよいようですDATEFORMAT

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 フィドルのデモ

データの保存方法によっては、 を使用する必要がない場合がありますDATEFORMAT。ただし、これにより、日付、時間、分、および秒でグループ化された個別のユーザー名の数が返されます。それがあなたが達成しようとしていることだと思います。トラフィックが最も多い秒または時間を把握しようとしている場合はSECOND(add_date)、たとえば次のように使用できます。正確なニーズに依存します (フィドルには両方の例が含まれています)。

于 2013-05-01T17:05:13.447 に答える