0

ユーザーID、IPアドレス、ログイン日時を含むログテーブルがあります。複数のアカウントを設定して、他のユーザーになりすましているユーザーを特定する必要があります。

これは私のサンプル ログ テーブルです。

+---------+-------------+---------------------+
| user id | ip address  | log in datetime     |
+---------+-------------+---------------------+
| 17      | 192.168.1.4 | 2012-04-01 00:01:00 |
+---------+-------------+---------------------+
| 21      | 192.168.1.2 | 2012-04-01 00:02:00 |
+---------+-------------+---------------------+
| 11      | 192.168.1.5 | 2012-04-01 00:06:00 |
+---------+-------------+---------------------+
| 1       | 192.168.1.3 | 2012-04-01 00:09:00 |
+---------+-------------+---------------------+
| 3       | 192.168.1.3 | 2012-04-01 00:15:00 |
+---------+-------------+---------------------+
| 8       | 192.168.1.5 | 2012-04-01 00:22:00 |
+---------+-------------+---------------------+
| 9       | 192.168.1.1 | 2012-04-01 00:26:00 |
+---------+-------------+---------------------+
| 13      | 192.168.2.1 | 2012-04-01 00:27:00 |
+---------+-------------+---------------------+
| 2       | 192.168.1.1 | 2012-04-01 00:28:00 |
+---------+-------------+---------------------+
| 33      | 192.168.1.7 | 2012-04-01 00:30:00 |
+---------+-------------+---------------------+
| 27      | 192.168.1.1 | 2012-04-01 00:31:00 |
+---------+-------------+---------------------+
| 22      | 192.168.1.7 | 2012-04-01 00:45:00 |
+---------+-------------+---------------------+

それで、ここに私の質問があります:同じIPアドレスを持ち、ログイン時間の差が5分未満のユーザーIDのリストを選択する方法は?

4

2 に答える 2

1

このようなものはうまくいくでしょう

SELECT t1.user_id,t2.user_id
FROM login_table t1
    INNER JOIN login_table t2 ON t1.ip_address=t2.ip_address AND t1.user_id!=t2.user_id
WHERE 
    t1.login_time BETWEEN 
        DATE_SUB(t2.login_time, INTERVAL 5 MINUTE) 
    AND DATE_ADD(t2.login_time, INTERVAL 5 MINUTE)

一意のペアのみが必要で、順序を気にしない場合は、使用できます

SELECT DISTINCT GREATEST(t1.user_id,t2.user_id),LEAST(t1.user_id,t2.user_id)...
于 2012-04-06T10:01:27.347 に答える
1

このようなものはどうですか -

SELECT *
FROM log l1
INNER JOIN log l2
    ON l1.ip_address = l2.ip_address
    AND l1.user_id < l2.user_id
    AND l1.login _time BETWEEN (l2.login_time - INTERVAL 5 MINUTE) AND (l2.login_time + INTERVAL 5 MINUTE)
于 2012-04-06T10:03:53.680 に答える