0 レビュー
2 回答
php-テーブルで同じユーザー名を持つ行を選択し、日付間隔を比較します
次のログテーブルがあります
- ユーザー名
- access_point
- 認証
接続の問題を見つけるために、1分以内に同じアクセスポイントで多くのアソシエーションを持っているユーザーを知りたいです。
同じアクセスポイントで複数の同じユーザー名エントリをテストし、最初と2番目の日付間隔を1つずつ比較するクエリが必要です。 もちろん、同じユーザー名ごとに3つ以上のエントリがある可能性があります。
実際には、同じアクセスポイントでユーザーが持っている接続の数しか返すことができません。
その他の例:
このようなデータがある場合:
Username Access_point Authdate
ALAIN AP01 2013-11-22 05:00:01
ALAIN AP01 2013-11-22 04:50:01
ALAIN AP02 2013-11-22 03:00:01
この例では、ALAINはAP01で2回接続されていますが、同じAPでの接続間隔は10分であるため、すべて問題ありません。
しかしここに:
Username Access_point Authdate
ALAIN AP01 2013-11-22 05:00:01
ALAIN AP01 2013-11-22 04:59:10
ALAIN AP01 2013-11-22 04:59:01
ALAIN AP01 2013-11-22 04:58:50
ALAIN AP01 2013-11-22 04:57:55
ALAIN AP01 2013-11-22 04:50:01
ALAIN AP02 2013-11-22 03:00:01
ALAINが同じAPに複数回接続されており、間隔が1分未満であることが多い
わからない
0
レビュー
答え :
解決策:
このようなもので、必要なトップレコードが表示されると思います
SELECT log_tmp.username, COUNT(log_tmp.username) as ctn
FROM (SELECT username FROM log WHERE authdate > 'XXX' AND authdate < 'YYY') AS log_tmp
GROUP BY log_tmp.username ORDER BY cnt DESC
条件をカスタマイズする場合は、内部クエリで行うだけです。
わからない
0
レビュー
答え :
解決策:
次のような方法を試してみてください
SELECT U.username FROM your_table as U where
EXISTS (
SELECT U2.username FROM your_table as U2 WHERE
U.accesspoint = U2.accesspoint AND U.username = U2.username AND
DATEDIFF (U.authdate, U2.authdate) < what_you_want
)
[編集]
多分次の
SELECT DISTINCT U.username
FROM table AS U
WHERE (
SELECT count( * )
FROM table AS U2
WHERE U.username = U2.username ... etc
AND (
(
datediff(U.acces, U2.access)
) < your_limit
)
) >1 #this to avoid same row to be returned twice
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。