2014-01-09 70 views
4

比方說,我有一個表,看起來像這樣:選擇多次出現的只有一個入口

 
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) 

我希望我在這裏做任何事情感覺:) 感謝您的時間

回答

9
SELECT * 
    FROM table 
    WHERE id IN (SELECT MAX(id) FROM table GROUP BY fk) 
+0

赫然短的查詢,得益於它完美 – GameDroids

+0

:-)歡迎親愛 –

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; 

OR

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; 
1

試試這個:

SELECT t.* FROM 
table1 t 
JOIN (
    SELECT MAX(id) as id 
    FROM table1 
    GROUP BY fk 
) t1 
ON t.id = t1.id 

內部查詢會給你最ID使用MAX()每個FK。然後,我們將這張內部表與您的主表結合在一起。

0

你也可以做

SELECT id, fk, value FROM table GROUP BY fk HAVING id = MAX(id) 

我沒有的MySQL在這裏,但它在Sybase ASE的工作

+0

我在我的MySQL數據庫上試過了你的建議,但是返回了0行。不過感謝您指出關鍵字「HAVING」,這對我未來的查詢肯定會有用 – GameDroids