SQL按键选择查询组(加入或子查询)

时间:2017-03-21 13:31:47

标签: sql

试图绕过这个问题,但这里是......

表:TVEpisode
专栏:TVEpisodeID(PK),TVSeriesID,季节(数字),剧集(数字),观看(0或1)

我希望获得的是每个TVSeries的首部未观看(价值0)剧集。例如,如果我已经观看了第一季的TVSeriesID(45)以及我观看过的第2集第2集,那么我希望该查询返回:

TVEpisodeID | TVSeriesID | Season | Episode
PK          | 45         | 2      | 6

需要每个TVSeries的结果

2 个答案:

答案 0 :(得分:4)

在大多数数据库中,您可以使用ANSI标准窗口函数执行此操作:

select tve.*
from (select tve.*
             row_number() over (partition by tvseriesid order by season, episode) as seqnum
      from tvepisode tve
      where tve.watched = 0
     ) tve
where seqnum = 1;

我认为“第一个”指的是seasonepisode的组合。

答案 1 :(得分:0)

这应该为您提供所有季节/剧集组合的第一个watched=0

SELECT *
FROM TVEpisode
WHERE TVEpisodeID IN
    ( SELECT min(TVEpisodeID)
     FROM TVEpisode
     WHERE watched=0
     GROUP BY TVSeriesID) t