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';
在 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';
有很多关于最大值的问题,但我找不到任何与此问题相关的问题。
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';
在 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';