我有一个查询,我想获取连接表中的最后一项,但我想过滤该连接。当我使用“group by”子句时,它似乎返回第一个值,而不是最后一个值。我怎样才能得到最后一个?
例如,我有一个 Order 表和一个 OrderStatus 表,我想获取具有特定状态的 Order,但前提是它是最后一个 OrderStatus...
订单状态表...
ID | OrderID | Status
---------------------
1 | 1 | cart
2 | 1 | pending
3 | 1 | paid
4 | 2 | cart
5 | 2 | pending
因此,对于 Status = pending,我只想返回 OrderID 2 而不是 OrderID 1。这是我尝试过的:
select * from `Order` where `ID` in
(select `OrderID` from `OrderStatus` where `status` like 'pending'
group by `OrderID` order by `ID` DESC)
但它返回两个订单。 order by 子句被忽略,我猜它适用于分组之后而不是之前的查询。仅当它是最后一个时,如何才能获取 OrderStatus = pending?
最佳答案
您可以使用 having
子句获取最后状态为“pending”的 orderid
:
select o.*
from Orders o
where o.id in (select os.orderid
from orderstatus os
group by os.orderid
having max(os.id) = max(case when os.status = 'pending' then os.id end)
);
比较的工作原理是计算最大的 id
并将其与“pending”的最大 id
进行比较。
关于mysql - 如何对 "group by"子句进行排序,以便返回的值是最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53367422/