比方说,我们有这个表名为表一MySQL - 如何获取按特定字段分组的最新行值?
id foreign_id value
1 1 x
2 2 y
3 1 y
4 2 x
5 3 x
其中id
是主键
你如何获得最新的行(我们将在id
的以立足本)分组由外国身份证?基本上,我想是
id foreign_id value
3 1 y
4 2 x
5 3 x
比方说,我们有这个表名为表一MySQL - 如何获取按特定字段分组的最新行值?
id foreign_id value
1 1 x
2 2 y
3 1 y
4 2 x
5 3 x
其中id
是主键
你如何获得最新的行(我们将在id
的以立足本)分组由外国身份证?基本上,我想是
id foreign_id value
3 1 y
4 2 x
5 3 x
尝试此查询
SELECT max(id) AS ID, foreign_id FROM tbl
GROUP BY foreign_id
如果还需要值,那么
SELECT a.ID, a.foreign_id, a.value
FROM tbl a,
(SELECT max(id) AS ID, foreign_id
FROM tbl GROUP BY foreign_id) b
WHERE a.id = b.id AND
a.foreign_id = b.foreign_id
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT foreign_ID, max(id) max_ID
FROM tableName
GROUP BY foreign_ID
) b ON a.foreign_ID = b.foreign_ID AND
a.ID = b.max_ID
输出
╔════╦════════════╦═══════╗
║ ID ║ FOREIGN_ID ║ VALUE ║
╠════╬════════════╬═══════╣
║ 3 ║ 1 ║ y ║
║ 4 ║ 2 ║ x ║
║ 5 ║ 3 ║ x ║
╚════╩════════════╩═══════╝
尝试此查询,
SELECT t.id, t.foreign_id, t.value FROM #temp t
WHERE t.id IN (SELECT max(id) FROM #temp GROUP BY foreign_id)
替换#temp
与实际的表名。
`SELECT MAX(id) AS ID,
foreign_id,
value
FROM tbl
GROUP BY foreign_id ASC`
这个ans对于少量的结果来说相当好,但是如果你使用大量的数据,那么它可能只对“value”字段有错误的值。另一种方法更适合你获得适当的价值,这里是这个代码。
`SELECT MAX(id) AS ID,
foreign_id,
value
FROM tbl
WHERE id in (SELECT MAX(id) FROM tbl)
GROUP BY foreign_id ASC`