2013-03-14 30 views

回答

2

尝试此查询

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 

FIDDLE

0
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  ║ 
╚════╩════════════╩═══════╝ 
3

尝试此查询,

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与实际的表名。

0
`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` 
相关问题