SELECT MAX()和同一行中的相应字段

时间:2013-08-28 12:36:08

标签: mysql sql max

这是我的表A

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

我需要每个年级的nameID max(orderID)。我可以从每个年级得到orderID,但nameID始终是第一个。

非常感谢!


Praveen给出了正确的查询!他回答的额外问题

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

这是一个使用相关子查询的适当查询:

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;

答案 2 :(得分: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