【问题标题】:Get only result for most recent date on many to many relationship仅获取多对多关系上最近日期的结果
【发布时间】:2021-02-13 15:14:44
【问题描述】:

我有 3 张桌子:

购买请求 - 有列 - id、name

Order_purchase_request - 具有列 - order_id、purchase_request_id(多对多链接)

订单 - 有列 - 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 查询返回订单日期最高的采购请求

结果集应该类似于 -

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。但它返回了我所有的行。有什么问题?

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。

【问题讨论】:

    标签: mysql mariadb many-to-many inner-join greatest-n-per-group


    【解决方案1】:

    你可以使用窗口函数:

    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;
    

    【讨论】:

    • 它工作得很好,谢谢,但是我们不能更简单(没有窗口功能)吗?
    • @Dev'Hamz:在我看来,这是满足您要求的最简单方法——而且它也应该是一种有效的方法。
    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多