1

NetLogs という名前の MySQL テーブルがあります

servername   , session , label     , occurence
| Nost       |   11973 | Unknown   |   1 |
| Nost       |   11976 | Scan      |  74 |
| Nost       |   11976 | Unknown   |  35 |
| Gold       |   11998 | Attack    |   1 |

私は得る必要があります

Nost | 11973|unknown|1|
Nost| 11976 |Scan | 74|
Gold|11998|Attack|1|

結果として。

私は試した:

select t1.* from NetLogs t1 left join NetLogs t2 
on t1.servername=t2.servername and t1.session=t2.session and t1.occurence < t2.occurence 
where t2.occurence is null;

しかし、エラー 1137 - テーブルを再開できません が表示されます

また、最後に出現回数がなくても同じ結果に落ち着きます。

したがって、以下の解決策のいくつかは私にとってはうまくいかなかったので、一時テーブルではなく通常のテーブルとしてテーブルを作り直しました。一時テーブルで実行していたため、エラーが発生しました...

これは、私が望んでいたとおりに機能するものです。

select a.* from NetLogs a where a.occurence = (select max(occurence) occurence from NetLogs b where a.session = b.session and a.serverName = b.serverName);

4

2 に答える 2

2
SELECT  a.*
FROM    NetLogs a
        INNER JOIN
        (
            SELECT  session, MAX(occurence) occurence
            FROM    NetLogs
            GROUP   BY session
        ) b ON a.session = b.session AND
                a.occurence = b.occurence

別の方法、

SELECT  a.*
FROM    NetLogs a
WHERE   a.occurence = 
        (
            SELECT  MAX(occurence) occurence
            FROM    NetLogs b
            WHERE   a.session = b.session
        ) 
于 2013-09-04T08:36:12.530 に答える
0

クエリ:

SQLFIDDLEEXサンプル

SELECT  a.servername,
        a.session,
        a.label,
        a.occurence
FROM    NetLogs a
 LEFT JOIN NetLogs b
  ON b.session = a.session
  AND a.occurence < b.occurence
WHERE b.session IS NULL

結果:

| SERVERNAME | SESSION |   LABEL | OCCURENCE |
|------------|---------|---------|-----------|
|       Nost |   11973 | Unknown |         1 |
|       Nost |   11976 |    Scan |        74 |
|       Gold |   11998 |  Attack |         1 |
于 2013-09-04T08:50:06.057 に答える