2013-08-17 50 views
0

我困在一個SQL查詢中,任何人都可以幫我嗎?以下是我的表[LEVEL]在sql中獲取最高級別​​值的父記錄

有了下面的列

Name Varchar(50), ObjectId Int, ParentId Int, LevelId int 

是記錄:

INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('Test',1,NULL,10); 
INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('3rdItem',2,1,50); 
INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('1stItem',3,2,30); 
INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('test',4,3,40); 
INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('2ndItem',5,3,40); 
INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('test tom',6,3,40); 
INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('waterweg23',7,3,40); 
INSERT INTO [LEVEL] (Name,ObjectId,ParentId,LevelId) VALUES('test',4,2,10); 

我需要有最高級別ID父母拿到的記錄。

這裏記錄的「測試」有2個父母,即(3 & 2)它應該顯示「測試」,只有父母2,如對象2具有最高級別ID比3 應該只返回一個記錄的ParentId = 2爲'測試'。

所以我想有最大levelId所有家長記錄

+2

*** *** SQL恰好在*結構化查詢語言* - 許多數據庫系統中使用的語言,但沒有AA數據庫產品......很多事情都是供應商 - 具體 - 所以我們真的需要知道你使用的數據庫系統**(和哪個版本)(請相應地更新標籤)...... –

+0

實際上這個看起來很像那個 - http:// stackoverflow.com/questions/18235856/recursive-sql-relation-query,只有標籤是不同的。我不明白 - 你爲什麼這樣做?你確定你在MySQL工作嗎? –

回答

0

我不太清楚,如果你正在尋找這個

SELECT Name, ObjectId, ParentId, MAX(LevelId) AS LevelId FROM LEVEL GROUP BY Name; 

您可以嘗試在所提供的DEMO LINK查詢@Prix在他的回答中。我也在那裏試過;)

希望這會有所幫助。

+0

您的查詢不符合要求,因爲它不會按照他的要求返回所有記錄。 – Prix

+0

@Prix:他說他想要所有記錄都是max levelid。 「所以我想獲得與父母有max levelId所有記錄」。我在理解這個問題上可能是錯的,但上面的引用內容使我回答了這個問題。 – Roger

+0

那麼它並沒有列出1stItem和3rdItem,所以它並不是所有的記錄。 http://sqlfiddle.com/#!2/8c1fe4/14從我所瞭解的情況來看,他希望所有記錄都有他們特殊的文字。但是,我又很難理解他在說什麼,所以誰知道那也是他想要的。 – Prix

0

以下查詢將提供所需的結果。

select l.objectid, l.parentid 
from level l 
inner join ( 
    select objectid, max (levelid) as maxlevel from level 
) as m on l.objectid = m.objectid 
0

嘗試

 select lv.LevelId 
      from [LEVEL] lv 
    cross join (select max(p.ParentId) pid from [LEVEL] p) mp 
     where lv.ParentId = mp.pid 
      ;