这是我的表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给出了正确的查询!他回答的额外问题
答案 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 强>