提问者:小点点

查找后续电影的较低分级


我有一个表movies和另一个名为directors的表,具有以下属性:

Movies               Director
------              -----------
title               name
director            country
year
genre
rating

我试图找到的电影由同一导演谁有一个较低的评级比任何后续的电影从同一导演。这是我的疑问:

SELECT * 
FROM movies m1
JOIN directors d ON m1.director=d.name 
WHERE EXISTS
    (
    SELECT * 
    FROM movies m2 
    WHERE (m1.rating<m2.rating 
    AND m1.year<m2.year)
    AND m1.director=m2.director
    );

我希望得到这样的结果:

movie1    director1    rating-2   year1
movie2    director1    rating-4   year2
movie3    director1    rating-2   year4
movie4    director1    rating-4   year7

然而,我得到的却是:

movie1    director1    rating 2   year1
movie2    director1    rating 4   year2
movie3    director1    rating-4   year4
movie4    director1    rating-2   year7

我认为这不是正确的做法。:(


共1个答案

匿名用户

你想要一个局部最小值。..但反过来。

select m.*
from (select m.*,
             min(m.rating) over (partition by m.director order by m.year desc rows between unbounded preceding and 1 preceding) as min_future_rating
      from movies m
     ) m
where rating < min_future_rating;