我有下表:
ID | team1 | team2 | Date
-----------------------------
1 | 36 | 25 | 2019-01-05
2 | 25 | 39 | 2019-01-07
3 | 36 | 39 | 2019-01-09
4 | 36 | 11 | 2019-01-10
5 | 11 | 25 | 2019-01-11
6 | 25 | 36 | 2019-01-12
如何获取第 25 和 36 队的最后 2 个条目。好的结果是:
ID | team1 | team2 | Date
-----------------------------
4 | 36 | 11 | 2019-01-10 > 36
5 | 11 | 25 | 2019-01-11 > 25
6 | 25 | 36 | 2019-01-12 > 25 & 36
25 和 36 只是举例。我们可以有一长串团队,也可以有一个非常大的条目列表。如果将在一列上执行搜索,例如 team1,则查询将如下所示:
SELECT * FROM (
SELECT
ID, team1, team2, `Date`,
CASE WHEN @id != team1 THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank,
@id := team1
FROM matches
JOIN (SELECT @rownum := 0, @id := NULL) r
WHERE team1 IN(25, 36)
OREDER BY team1, `Date` DESC
) WHERE rank <= 2
最佳答案
您可以使用 LEFT OUTER JOIN 连接表以供以后的游戏使用,并丢弃任何有外行游戏的行:-
SELECT a.*
FROM matches a
LEFT OUTER JOIN matches b
ON a.team1 = b.team1
AND a.`date` < b.`date`
WHERE b.id IS NULL
AND a.team1 IN (25, 36)
关于mysql - 如何为每个组选择最后一个条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57456914/