显示连续发生的值

时间:2015-11-21 22:19:11

标签: mysql

我试图显示连续两年执导的所有董事名单。

鉴于以下数据:

Pantomime table:
Year   titleID  DirectorID
2000    1         1
2001    2         7
2002    3         7
2003    4         8
2004    5         9
2005    6         9

这是理想的结果:

DirectorID
   7
   9

这是我到目前为止所尝试的查询,但无法获得所需的结果。

SELECT directorID
FROM pantomime
where directorID = directorID+1
GROUP BY directorID

3 个答案:

答案 0 :(得分:5)

一种方法使用exists

select distinct p.directorId
from pantomine p
where exists (select 1
              from pantomine p2
              where p2.directorId = p.directorId and p2.year = p.year + 1
             );

此想法还有其他有趣的变体,例如使用in

select distinct p.directorId
from pantomine p
where p.year in (select p2.year + 1
                 from pantomine p2
                 where p2.directorId = p.directorId
                );

这是一个完全神秘的方法,根本不使用类似连接的机制(只是聚合):

select distinct directorId
from ((select directorId, year from pantomine)
      union all
      (select directorId, year + 1 from pantomine)
     ) p
group by directorId, year
having count(*) = 2;

这也是select distinctgroup by一起使用的非常罕见的情况之一。

答案 1 :(得分:3)

您可以使用加入来查看哪些条目具有明年的值,然后使用不同的方式获取相关的ID:

select distinct a.directorID 
from Pantomime as a 
inner join Pantomime as b on a.year = b.year-1 
                         and a.directorID = b.directorID;

因为我正在使用内部加入,所以只有在b-表示year-1出现在这个directorId

答案 2 :(得分:0)

试试这个,没有连接或子查询,只是一个简单的分组:

SELECT directorID
FROM pantomime
GROUP BY directorID
HAVING COUNT(*) = 2
AND MAX(Year) = MIN(Year) + 1

这是fiddle