2013-08-28 46 views
2

在這裏是我的表A中SELECT MAX()和相應的字段在同一行

orderID groupID nameID 
1  grade A foo 
2  grade A bar 
3  grade A rain 
1  grade B rain 
2  grade B foo 
3  grade B bar 
1  grade C rain 
2  grade C bar 
3  grade C foo 

期望的結果:

rain 
bar 
foo 

我需要的max(orderID)nameID從每個年級。我可以從每個年級獲得orderID,但nameID始終保持第一。

非常感謝!


Praveen給出了正確的查詢!在他的回答下的額外問題

回答

3

編輯:我只是在我的答案中修復了一個錯誤。

您正在尋找的東西很喜歡:

select 
    orderID, 
    groupID, 
    nameID 
from 
    A 
where 
    concat(orderID,'-',groupId) in (select concat(max(orderID),'-',groupId) from A group by groupID) 

編輯:的問候額外的問題:
要使列表填充NameID的順序,只需添加到查詢:

order by 
    nameID 
+0

HTTP:// WWW .sqlfiddle.com /#!2/e94e8f/1 –

+0

Tnx爲sqlfiddle。這裏是編輯後的小提琴:http://www.sqlfiddle.com/#!2/c38d7/2/0 –

1

下面是使用相關子查詢的適當查詢:

select orderID, groupID, nameID 
from A 
where orderId = (select max(OrderId) from A a2 where A.groupId = a2.groupId); 

如果你想與聚集做到這一點,你可以使用group_concat()/substring_index()招:

SELECT max(orderID) as orderID, groupId, 
     substring_index(group_concat(nameId order by orderId desc), ',', 1) as nameID 
FROM A 
GROUP BY groupID; 
+0

啊,我現在看到它... orderId不是唯一的。我會盡力解決我的答案。下次請給我留下評論。 –

+0

@ nl-x。 。 。我沒有讓你失望。我放棄了投票。通常,我只是留下評論。事實上,就我所知,這個答案是低估的,儘管它是正確的。 –

1
SELECT * FROM (select 
    max(`orderID`) as maxID, `groupID`, `nameID` 
from 
    Table1 
GROUP BY `groupID`, `nameID` 
ORDER BY maxID desc) abc 
GROUP BY GROUPID 

Fiddle With my test data

Fiddle with your data

+0

這一個是對的!非常感謝Praveen! – user2689375

+0

如何按名稱ID號的順序放置列表?有三個'foo',喜歡得到3個foo。 – user2689375

+0

我不認爲這會永遠返回最大值。您假設第二個分組依據將始終取得組的最高分。但我不認爲這種行爲是有保證的。 –

相關問題