Mysql版本:8.0.21
我希望获取类型为“fruit”的每个“TableData”的最新值。
Table Name: TableNames
_________________________________________
| id | name | id_group | type |
|-----------------------------------------|
| 0 | AppleGroup | apple | fruit |
| 1 | BananaGroup | banana | fruit |
| 2 | OtherGroup | other | other |
Table Name: TableData
__________________________
| id | id_group | value |
|--------------------------|
| 0 | apple | 12 |
| 1 | banana | 8 |
| 2 | apple | 3 | <--get latest
| 3 | banana | 14 |
| 4 | banana | 4 | <--get latest
这个查询我得到了所有的项目,但我在寻找每一个最新的。我已经尝试过按组和按顺序排序,但问题是,我首先需要按顺序排序,然后按组,似乎这是不可能的Mysql。
SELECT
n.name,
d.value
FROM TableNames n
INNER JOIN
(
SELECT *
FROM TableData
) d ON d.`id_group` = n.`id_group`
WHERE type = 'fruit'
Expected ouput:
_____________________
| name | value |
|---------------------|
| AppleGroup | 3 |
| BananaGroup | 4 |
2条答案
按热度按时间b1payxdu1#
如果没有
ROW_NUMBER()
,因为您可以使用较旧版本的MySQL(8.0之前),所以可以使用max(id)创建内部连接:参见:DBFIDDLE
bmvo0sr52#
在MySQL 8+中,我们可以使用
ROW_NUMBER()
:为了优化,您可以考虑向
TableData
表添加以下索引:注意,在InnoDB上,MySQL会自动在索引末尾包含
id
,因此索引为(id_group, id)
,这将使MySQL高效地在CTE中执行连接,并计算ROW_NUMBER
。