首页 > 解决方案 > MySQL - 根据条件获取每个成员的最后一条记录

问题描述

我需要一些帮助来查询:

Table Customers
id        name       email
1         john       john@abc.com
2         doe        doe@abc.com

Table Membership
id      facility       package
1       a              x
2       b              y
3       c              z

Table Orders
id      orderid        result            customerid      membershipid
1       order-1        Unsuccessful      1               1
2       order-2        Successful        2               1
3       order-3        Successful        1               1
4       order-4        Successful        1               2
5       order-5        Unsuccessful      1               2

我想要实现的是获得最后一个订单,该订单对每个会员资格的客户都不成功

这意味着在这种情况下查询应该只返回 order-5。因为membershipid 1的最后一条记录是成功的。

到目前为止,我已经使用了这个查询,但它返回最大的不成功记录并且不遵守最后一条记录。

我希望我已经解释了我的问题。

这是查询

SELECT o.transactionresult FROM orders o where o.transactionresult='Unsuccessful' group by o.membershipid ORDER by o.id DESC

标签: mysqlsql

解决方案


如果最后你的意思是最后一个 id 那么你可以使用 NOT EXISTS:

SELECT o.* 
FROM orders o 
where o.transactionresult='Unsuccessful'
and not exists (
  select 1 from orders
  where membershipid = o.membershipid and id > o.id
)

请参阅演示

如果您想要每个客户的会员资格:

SELECT o.* 
FROM orders o 
where o.transactionresult='Unsuccessful'
and not exists (
  select 1 from orders
  where membershipid = o.membershipid and customerid = o.customerid and id > o.id
)

请参阅演示
结果:

| id  | orderid | transactionresult | customerid | membershipid |
| --- | ------- | ----------------- | ---------- | ------------ |
| 5   | order-5 | Unsuccessful      | 1          | 2            |

推荐阅读