我有这个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。
答案 0 :(得分: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 example):
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
答案 1 :(得分: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;
没有子查询,良好的表现,良好的学习模式:)
答案 2 :(得分: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