mysql - 如何为每个组选择最后一个条目?

标签 mysql

我有下表:

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/

相关文章:

mysql - asp mysql变量测试问题

php - MySQL语法错误

mysql - 在 MySQL 中运行函数时出错

mysql - 在Mysql中使用正则表达式获取最大值

SQL LIKE 问题

mysql - 使用 group by 来获取计数,同时具有其他唯一性条件

mysql - SQL - 获取多个最接近的值

MySQL:使用@vars 和子查询

mysql - 选择最新的行,忽略旧的重复项

mysql - 如何测试查询的实际执行时间?