SQL - 连续获取最小数字

时间:2015-11-03 19:52:34

标签: sql postgresql

标题可能没有意义所以我会提供一些背景信息。

我有一张桌子,称之为电影。

电影元组具有以下值:名称,导演,流派,年份

我正在尝试创建一个查询,允许我返回所有从未发布过两部连续超过4年的恐怖电影的导演。

我不确定我从哪里开始但是我想通过创建一个特定年份的查询开始,返回下一个最小年份,以便我可以检查这两者之间的差异是否更小超过4,并继续为所有电影。

我的尝试是:

SELECT D1.Director 
FROM Movies D1
WHERE D1.Director NOT IN 
(SELECT D2.Director FROM Director D2 
 WHERE D2.Director = D1.Director 
 AND D2.Genre = 'Horror'
 AND D1.Genre = 'Horror' AND D2.Year - D1.Year > 4 
 OR D1.Year - D2.Year > 4) 

由于显而易见的原因无效。

我也曾尝试使用连接,并且它适用于遵循2000,2003,2006等模式的电影,但如果超过3部电影则失败。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

选择所有数据,并使用lag或lead返回上一年或下一年。之后再看看两者之间的区别。

EventEmitters

答案 1 :(得分:0)

试试这个:

SELECT * FROM (
    SELECT director, min(diff) as diff FROM (
        SELECT m1.director, m1.year as year1, m2.year as year2, m2.year-m1.year as diff 
        FROM `movies` m1, movies m2 
        WHERE m1.director = m2.director and m1.name <> m2.name and m1.year<=m2.year 
        and m1.genre='horror' and m2.genre='horror'
    ) d1 group by director
) d2 WHERE diff>4

首先,在内部选择中,它将列出所有导演恐怖电影的电影对,并计算年度差异,然后选择最小值(连续性),然后选择超过4年的差异......