2010-03-21 83 views
0

這是我的我的表的例子:MYSQL不同的查詢

id | name | foreign_id | 
------------------------- 
1 a  100 
2 b  100 
3 c  100 
4 d  101 
5 a  102 
6 b  102 
7 c  102 

我想獲得與最新foreign_id在不同的文件(更大不一定是最大的,但)。 在這個例子中,它將與行4,5,6,7。任何人有任何想法?非常感謝你!

回答

2

你可以嘗試像下面: -

SELECT Id,Table1.Name,Table1.Fid FROM Table1 INNER JOIN 
(SELECT Name,Max(FId) AS FId FROM Table1 Group By Name) 
Table2 ON Table1.FId=Table2.FId AND Table1.Name=table2.Name 

此作品在SQL服務器ATLEAST。請檢查MySQL。對不起,我沒有MySQL來測試這個。

+0

經過測試和工作完美! – Patrick 2010-03-22 14:47:00

0

選擇 * FROM table_name的 WHERE foreign_id> 100

+0

geff,我編輯了我的問題來澄清一下。 – Patrick 2010-03-21 15:20:50

+0

@帕特里克:更新的查詢是否現在回答您的問題? – geffchang 2010-03-21 15:45:37

0

你可以這樣做:

select * 
from table_name 
where max_id_you_want = (select max(id_you_want) from table_name) 
+0

這個列表5,6和7並沒有列出問題中提到的4。 – 2010-03-21 16:22:47

+0

是的,但它是解決方案的一種方式。我認爲最近的ID將是最大的,否則你需要找到另一種方式來獲取它。要獲得最大的所有id的集合,可以執行類似於從id_you_want所在的some_table中進行選擇的任何操作(查詢返回您正在查找的結果) – 2010-03-21 20:03:37

1

聽起來像是你只是想這樣的:

SELECT name, MAX(foreign_id) 
FROM table 
GROUP BY name; 

如果你需要的ID(我猜你不會,因爲名字和foreign_id應該可能是唯一的,從而使ID列變得不必要),我認爲MySQL將允許您通過將該列添加到SELECT列表來獲得該列 - 儘管這是非標準SQL。如果你想要標準的SQL,那麼你需要像Ashish寫的東西。

0
SELECT * FROM table 
GROUP BY name 
having MAX(foreign_id);