-1

私はこのMySqlテーブル(スコア)を持っています:

id  userId  gameId  score1  score2  idPaisesL   idPaisesV
59  1       11      1       1       229         173
57  1       11      1       0       229         173
58  1       11      2       1       229         173
56  1       11      2       2       229         173
53  1       11      7       7       229         173
52  1       11      3       5       229         173
51  3       11      6       6       229         173
50  3       11      6       6       229         173
49  3       11      5       5       229         173
48  1       11      5       0       229         173
47  1       11      2       3       229         173
46  1       11      1       0       229         173
23  1       1       5       3       173         52
54  1       11      2       0       229         173

gameId = 11のすべてのuserIdの最後の結果のみを選択したいのですが、どうすればよいですか?plzを助けます。

4

3 に答える 3

1

多分このようなもの:

SELECT
    *
FROM
    scores AS t
    JOIN 
        (
            SELECT
                MAX(t2.id) AS maxID
            FROM
                scores AS t2
            GROUP BY
                t2.userId
        ) AS Latest
        ON t.id=Latest.maxID
WHERE
    t.gameId=11
于 2012-06-08T14:39:32.547 に答える
1

idここでは、新しいエントリが常に増加しており、「最後の結果」がidそのユーザー/ゲームの組み合わせで最も高いエントリであると想定しています。

SELECT *
FROM scores a
WHERE gameId = 11
  AND id = (
    SELECT MAX(id)
    FROM scores b
    WHERE a.userId = b.userId
      AND a.gameId = b.gameId
)

MySQLは私の経験ではサブクエリに問題がある傾向があるため、これは最もパフォーマンスが高いとは限りません。


OLAP関数を備えた別のデータベースを使用している場合は、次のように実行できます(sqlfiddleの例)。

SELECT *
FROM (SELECT s.*,
             ROW_NUMBER() OVER (PARTITION BY userID, gameID ORDER BY id DESC) AS RN
      FROM scores s)
WHERE RN=1
  AND gameID=11
于 2012-06-08T14:34:38.477 に答える
1

「最後」までに、IDが最も高いものを意図している場合:

SELECT *
FROM scores s1
LEFT JOIN scores s2 ON s1.userId = s2.userId AND s1.id < s2.id
WHERE s2.id IS NULL
    AND gameId = 11;

サブクエリなし、優れたパフォーマンス、学習するための優れたパターン:)

于 2012-06-08T14:34:54.147 に答える