4

这是我的桌子 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

我需要nameIDmax(orderID)每个年级。我可以orderID从每个年级得到正确的结果,但nameID始终保持第一。

多谢!


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

4

3 回答 3

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
于 2013-08-28T12:38:06.880 回答
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;
于 2013-08-28T12:43:48.287 回答
1
SELECT * FROM (select
  max(`orderID`) as maxID, `groupID`, `nameID`
from
  Table1
GROUP BY `groupID`, `nameID`
ORDER BY maxID desc) abc
GROUP BY GROUPID

摆弄我的测试数据

摆弄你的数据

于 2013-08-28T12:50:52.083 回答