在 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
我有以下 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