0

我正在使用 MySql 数据库,并且有下表 oil_order:

oil_order:    

id  supId  ordered_on
1   12     2020-09-01 17:30:00
2   12     2020-09-01 17:30:04
3   12     2020-09-01 17:30:10
4   12     2020-09-01 17:30:13
5   12     2020-09-01 17:30:15

还有另一个表 order_item:

order_item:

id  order_id   tankId  amount
1   1           11      54653
2   2           12      54653
3   3           11      54653
4   4           13      54653
5   5           12      54653

一个订单可以有多个 oil_order。我想从 order_item 和每个 tank_id 中选择所有记录,它与最新的 oil_order.ordered_on 相对应。例如,由此产生的结果将是:

tank_id ordered_on
11      2020-09-01 17:30:10
12      2020-09-01 17:30:15
13      2020-09-01 17:30:13     

tank id 11 的订单项有两条记录,一条 order_id 1 和 order_id 3。我应该返回 order_id 3 的一条,因为 oil_order 中 id 为 3 的记录的日期比 id 为 1 的记录大。

我设法做的是:

SELECT item.tank_id,MAX(oil_order.ordered_on)
FROM order_item item
INNER JOIN oil_order oil_order 
ON item.order_id= oil_order.id 
GROUP BY item.tank_id;

但我需要从 order_item 执行以下 SELECT * 并将 MAX 案例添加到更低的位置。

4

1 回答 1

0

如果您的数据库支持,您可以使用窗口函数:

select *
from (
    select 
        oi.*,
        row_number() over(partition by oi.tankid order by oo.ordered_on desc) rn
    from order_item oi
    inner join oil_order oo on oo.id = oi.order_id
) t
where rn = 1
于 2020-09-01T17:12:15.380 回答