MySQL 根据与最大 ID 对应的值输出列

MySQL Output column based on value that corresponds with max ID

有很多关于最大值的问题,但我找不到任何与此问题相关的问题。

ID | Company | Result
----------------------
1  |    1    |   A
2  |    1    |   C
3  |    1    |   B <--
4  |    2    |   C
5  |    2    |   B
6  |    2    |   A <!--
7  |    3    |   C
8  |    3    |   A
9  |    3    |   B <--

我需要输出最后一个结果(基于 ID)为“B”的公司。

为了使问题进一步复杂化,$query 将这样使用:

select * from table where Company in ($query)

有什么想法吗?谢谢!

在 MySQL 8+ 上,这是一个您可以尝试使用分析函数的查询:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Company ORDER BY ID DESC) rn
    FROM yourTable
)

SELECT ID, Company, Result
FROM cte
WHERE rn = 1 AND Result = 'B';

Demo

在 MySQL 的早期版本中,我们可以尝试加入一个子查询,该子查询为每家公司查找最新记录:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT Company, MAX(ID) AS MAX_ID
    FROM yourTable
    GROUP BY Company
) t2
    ON t1.Company = t2.Company AND
       t1.ID = t2.MAX_ID
WHERE
    t1.Result = 'B';

Demo