在 MySQL 中的联接 table 中检索第一个小于值

Retrieving first less than value in a joined table in MySQL

我有以下 3 个 table:

我想要一个 table,它由三列组成,它们是:

order_id

联系时间之前的最后订单状态

status_description

因此所需的输出在 order_status table

中以红色突出显示

我设法在联系时间之前获取了所有订单状态,但每个订单只需要 1 个 order_id(我添加了时间戳列以供说明):

SELECT o.order_id, o.order_status_id, m.status_description, o.Timestamp
FROM
    contact c
        JOIN
    order_status o ON o.order_id = c.order_id
        JOIN
    meta_status m ON o.order_status_id = m.order_status_id
    WHERE o.Timestamp < c.Contact_time 
ORDER BY o.order_id;

您可以使用row_number()

select * from
(
SELECT o.order_id, o.order_status_id, m.status_description, o.Timestamp,row_number() over(partition by o.order_id order by o.Timestamp desc) as rn
FROM
    contact c
        JOIN
    order_status o ON o.order_id = c.order_id
       left JOIN
    meta_status m ON o.order_status_id = m.order_status_id
    where o.Timestamp < c.Contact_time 
)A where rn=1