仅获取多对多关系的最近日期的结果

Get only result for most recent date on many to many relationship

我有 3 个表 :

购买请求 - 有列 - id, name

Order_purchase_request - 有列 - order_id、purchase_request_id(多对多 link)

Orders - 有列 - id, name, ordered_on

Purchase requests table
1| A 
2| B
3| C

Orders table
1| XYZ | 2020-10-28 00:00
2| PQR | 2020-10-27 00:00
3| ABC | 2020-10-29 00:00
4| DEF | 2020-10-29 00:00
5| GHI | 2020-10-30 00:00

Order_purchase_request 
1|1
2|1
3|3
4|2
5|2
5|3

我希望 SQL 查询 return 具有最高订单日期的采购请求

结果集应该类似于 -

purchase_request_id|Order Name|Ordered on
     1    |      XYZ      | 2020-10-28 00:00
     2    |      GHI      | 2020-10-30 00:00
     3    |      GHI      | 2020-10-30 00:00

下面是我写的SQL。但它 return 给我所有的行。有什么问题吗?

SELECT p.id, p.purchase_request_name, o.ordered_on
from purchase_requests p
         JOIN order_purchase_request opr
              on p.id = opr.purchase_request_id
         JOIN orders o on opr.order_id = o.id
WHERE o.id = (SELECT o.id
      FROM ???
      WHERE o.id = apr.amazon_purchase_order_id
      ORDER BY o.id DESC LIMIT 1)
ORDER BY purchase_request_name DESC;

我正在使用 MariaDB。

您可以使用 window 函数:

SELECT *
FROM (
    SELECT p.id, p.purchase_request_name, o.ordered_on,
        RANK() OVER(PARTITION BY p.id ORDER BY o.ordered_on DESC) rn
    FROM purchase_requests p
    JOIN order_purchase_request opr ON p.id = opr.purchase_request_id
    JOIN orders o ON opr.order_id = o.id
) t
WHERE rn = 1
ORDER BY purchase_request_name DESC;