如何查询查询的表,使其仅返回最新的表

时间:2019-11-10 23:08:49

标签: mysql join

在MySQL中,我进行了查询,将3个表(电影表,库存表和租赁表)连接起来,得到以下结果:

film_id | title    | inventory_id | store_id | rental_ date | return_date
1       | Dinosaur | 1            | 1        | 2018-08-01   | 2018-08-7
1       | Dinosaur | 1            | 1        | 2018-09-01   | 2018-09-12
1       | Dinosaur | 1            | 1        | 2019-10-12   | 2018-10-17
1       | Dinosaur | 2            | 1        | 2019-10-01   | 2018-10-18
1       | Dinosaur | 2            | 1        | 2018-12-01   | 2018-12-7
1       | Dinosaur | 3            | 1        | 2019-02-01   | 2018-02-16

如何查询查询到的表,以便它只返回每个stock_id的最新return_date,这样我就没有不必要的数据(同一张电影的进出日期)。

1 个答案:

答案 0 :(得分:0)

从当前查询的结果来看,很明显您正在使用MySQL Sakila sample database

我认为您当前的查询是:

select
    f.film_id,
    f.title,
    i.inventory_id,
    i.store_id,
    r.rental_date,
    r.return_date
from film f
inner join inventory i 
    on i.film_id = f.film_id
inner join rental r 
    on r.inventory_id = i.inventory_id

要过滤每个return_date中最新的inventory_id,可以使用相关子查询,如下所示:

select
    f.film_id,
    f.title,
    i.inventory_id,
    i.store_id,
    r.rental_date,
    r.return_date
from film f
inner join inventory i 
    on i.film_id = f.film_id
inner join rental r 
    on  r.inventory_id = i.inventory_id
    and r.return_date = (
        select max(r1.return_date)
        from rental r1 
        where on r1.inventory_id = r.inventory_id
    )