0

MySQL クエリを使用してマルチアカウントを検索したい のですがSELECT DISTINCT(ip) AS ip, name FROM {table} ORDER BY timestamp ASC; 、すべてのアカウントが順番に一覧表示されます。

ip, name, timestamp

1, me, 2013-09-19 19:58:52
2, me, 2013-09-19 18:00:00
123, us, 2013-09-19 20:58:52
2, you, 2013-09-19 09:58:52

しかし、ロジックで選択する方法:

  1. name = "me" のすべての IP を見つけてください
  2. IP がポイント 1 に一致するすべての行を取得します。
  3. ポイント2からすべてを選択します。ただし、タイムスタンプが最新の1つのip-nickペアに対して1行のみ

疑似クエリ: "SELECT * FROM table WHERE name = "me" + ALL OTHER ROWS THAT MATCH "me" ip WHERE this row with IP must me the lastest timestamp;"

戻る:

1, me, 2013-09-19 19:58:52
2, you, 2013-09-19 09:58:52

元の答えの半分を知っている場合。最新のタイムスタンプなしでそれを行う方法 私もあなたの答えを歓迎します。

4

2 に答える 2

2

ここに#2があります:

SELECT t1.*
FROM Table t1
JOIN (SELECT DISTINCT ip
      FROM Table
      WHERE name = "me") me_ip
ON t1.ip = me_ip.ip

これが#3です:

SELECT t2.*
FROM Table t2
JOIN (SELECT t1.ip, t1.name, MAX(t1.timestamp) maxtime
      FROM Table t1
      JOIN (SELECT DISTINCT ip
            FROM Table
            WHERE name = "me") me_ip
      ON t1.ip = me_ip.ip
      GROUP BY t1.ip, t1.name) t3
ON t2.ip = t3.ip AND t2.name = t3.name AND t2.timestamp = t3.maxtime
于 2013-09-20T18:17:10.090 に答える
1

これにより、最新の一致だけでなく、すべての一致が表示されます。したがって、これはポイント 3 を満たしていません。誰かが私を打ち負かさない限り、私は編集します。

SELECT  t1.*

FROM    table as t1

        JOIN (SELECT ip FROM table GROUP BY ip HAVING COUNT(*) > 1) as dup
        ON t1.ip = dup.ip

ORDER BY t1.ip
于 2013-09-20T18:11:28.360 に答える