2017-03-21 82 views
-1

嘗試環繞此查詢我的頭,但這裏是......SQL SELECT查詢組由帶有密碼(加入或子查詢)

表:TVEpisode
列:TVEpisodeID(PK),TVSeriesID,季節(編號),看過(0或1)

我期待得到的是每個TVSeries的第一個未觀看(值爲0)的劇集。例如,如果我看過的所有的季節1的TVSeriesID(45)和我持續關注事件是第2季第5集,我想查詢返回:

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

極品導致每個TVSeries

+2

添加一些示例表格數據和預期結果 - 以及格式化文本。同時向我們展示您當前的查詢嘗試。 – jarlh

+2

請告訴我們您正在使用的數據庫(MySQL,SQL Server等)。 –

+0

數據庫是SQL Server。 – clarkes71

回答

4

的第一watched=0在大多數數據庫中,您將與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的組合。

0

這應該給你所有的季節/插曲組合

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

這將在sql服務器(也可能是其他數據庫)中失敗,因爲您在選擇列表中沒有出現在group by子句中的列。 –

+0

噢。謝謝,我在內部查詢中無論如何都不需要這些列。這就是爲什麼我使用外部查詢 – Utsav

+0

這假設TVEpisodeID具有相同的季節和情節組合的值的順序。這在查詢中沒有提及。 –