2012-04-10 4 views
1

私はlogin_logテーブルがあります。 enter image description hereグループは

をそして私はそう今のところ、私が持っているlogin_email, login_success, login_email, account_type_id, login_lock, login_ip

の「ユニーク」ログインがbaseedグループ化されたクエリを構築しようとしている

SELECT count(*) count, MAX(login_date) date, login_ip, login_email, account_type_id, login_lock, login_success 
FROM `login_log` 
GROUP BY login_email, login_success, login_email, account_type_id, login_lock, login_ip 
ORDER BY date DESC 

私を得るもの: enter image description here

しかし、行5と例えば、図6に示す。 6では、ユーザーはログインを3回失敗し、5行目に成功しました.5行目は1と表示されますが、失敗した試行より前に成功したログインがグループ化されています。

ログインが成功した行、ログインに失敗した行、ログインが成功した行、日付順の行が必要です。

日付クエリをグループ化して、互いに「ジャンプ」しないようにするにはどうすればよいですか?

答えて

1

クエリの問題は、[グループ化]セクションで[日付]でグループ化しないことです。その結果、Count(*)が不必要に増加します。追加

Group By Date 

は動作しますが、あなたが正しい間隔を与えていない可能性があります。 MySQLの日付を追加すると、()関数は、あなたが一日でそれを分割できるようになるので、あなたが追加します。

Group By Date(Date) 
またLOGDATEまたは類似のもののように、非予約MySQLのキーワードにエイリアス日を変更する場合があります

MySQLの日付/時刻関数の

より: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

+0

日付別のIグループIは、すべてのグループかもしれないにもない場合。考えられるのは、失敗したログイン試行回数は3回ですが、成功した場合は3回、カウント2 =>失敗、カウント1 =>成功、カウント1 =>失敗 –

+0

私はあなたが何を意味するかを見ます。 login_successで変更される間隔が必要なようです。純粋なMySQLでこれを行う方法がわかりません。これは良いスタートかもしれません:[link](http://www.artfulsoftware.com/infotree/queries.php?&bw=1280#798) - これはあなたと同じ行を特定する方法を示しています。上記の – citizenen

+0

を使用すると、Date()はすぐにすぐに十分に修正されています。 –