假设我有一个看起来像这样的表:
id fk value ------------ 1 1 'lorem' 2 1 'ipsum' 3 1 'dolor' 4 2 'sit' 5 2 'amet' 6 3 'consetetur' 7 3 'sadipscing'
每个 fk 可以多次出现,而对于每个 fk ,我想选择最后一行(或更精确地分别具有最高ID的行) - 像这样:
id fk value ------------ 3 1 'dolor' 5 2 'amet' 7 3 'sadipscing'
我认为我可以像这样使用关键字DISTINCT
:
SELECT DISTINCT id, fk, value
FROM table
但我不确定哪一行DISTINCT
将返回,它必须是最后一行。
有什么像(伪)
SELECT id, fk, value
FROM table
WHERE MAX(id)
FOREACH DISTINCT(fk)
我希望我在这里有任何意义:) 谢谢你的时间
答案 0 :(得分:9)
SELECT *
FROM table
WHERE id IN (SELECT MAX(id) FROM table GROUP BY fk)
答案 1 :(得分:2)
试试这个:
SELECT a.id, a.fk, a.value
FROM tableA a
INNER JOIN (SELECT MAX(a.id) id, a.fk FROM tableA a GROUP BY a.fk
) AS b ON a.fk = b.fk AND a.id = b.id;
或强>
SELECT a.id, a.fk, a.value
FROM (SELECT a.id, a.fk, a.value FROM tableA a ORDER BY a.fk, a.id DESC) AS a
GROUP BY a.fk;
答案 2 :(得分:1)
试试这个:
SELECT t.* FROM
table1 t
JOIN (
SELECT MAX(id) as id
FROM table1
GROUP BY fk
) t1
ON t.id = t1.id
内部查询将使用MAX()
为每个fk提供最高ID。然后我们将这个内部表与你的主表连接起来。
答案 3 :(得分:0)
您也可以
SELECT id, fk, value FROM table GROUP BY fk HAVING id = MAX(id)
我这里没有mysql,但它适用于Sybase ASE