2015-05-29 154 views
0

有沒有辦法將LIMIT等於COUNTDISTINCT條目排成一行?我有下面的查詢,這一切工作,但LIMIT。我的表格將有不同數量的DISTINCT seriesID,我希望每個不同系列ID的最後一季的最後一集。MYSQL LIMIT COUNT DISTINCT行

SELECT t1.* FROM myTable.SeriesEpisodes t1 JOIN (SELECT seriesID, MAX(Season) Season FROM myTable.SeriesEpisodes GROUP BY seriesID) t2 ON t1.Season = t2.Season AND t1.seriesID = t2.seriesID ORDER BY Episode DESC LIMIT ???

我試圖做一個子查詢像下面但出現了錯誤。

LIMIT (SELECT COUNT(DISTINCT seriesID) FROM myTable.SeriesEpisodes)

+0

不會有另一個「GROUP BY(t1.seriesID)」會產生你需要的結果嗎? –

+0

您不必限制 - 您已經按照seriesID分組,因此您永遠不會再獲得更多的行。 – LoztInSpace

+0

沒錯,但是它給了我比每個賽季最後一集更多的東西(它命令全部關閉它們並將它們全部返回),而且我只需要爲每個單獨的seriesID需要它。 – Wingman1487

回答

1

此查詢可能返回指定的結果。內聯視圖t2返回每個系列的最大季節。內聯視圖t3爲每個系列的每個季節返回最大的Episode。內聯視圖(派生表)的結果可以連接到原始表,以檢索與這些最大值關聯的詳細信息行。 (這假定(Series,Season,Episode)元組是唯一的。)

SELECT t1.* 
    FROM myTable.SeriesEpisodes t1 
    JOIN (SELECT s2.Series 
       , MAX(s2.Season) AS Season 
      FROM myTable.SeriesEpisodes s2 
      GROUP 
      BY s2.Series 
     ) t2 
    ON t2.Series = t1.Series 
    AND t2.Season = t1.Season 
    JOIN (SELECT s3.Series 
       , s3.Season 
       , MAX(s3.Episode) AS Episode 
      FROM myTable.SeriesEpisodes s3 
      GROUP 
      BY s3.Series 
       , s3.Season 
     ) t3 
    ON t3.Series = t1.Series 
    AND t3.Season = t1.Season 
    AND t3.Episode = t1.Episode 
ORDER 
    BY t1.Series 
    , t1.Season 

EDIT

- 或 -

的等效結果可以與這樣的查詢返回。內聯視圖t2返回每個系列最新季節的最新情節。

SELECT t1.* 
    FROM myTable.SeriesEpisodes t1 
    JOIN (SELECT s2.Series 
       , s2.Season 
       , MAX(s2.Episode) AS Episode 
      FROM myTable.SeriesEpisodes s2 
      JOIN (SELECT s3.Series 
         , MAX(s3.Season) AS Season 
        FROM myTable.SeriesEpisodes s3 
        GROUP 
         BY s3.Series 
       ) t3 
      ON t3.Series = s2.Series 
      AND t3.Season = s2.Season 
      GROUP 
      BY s2.Series 
       , s2.Season 
     ) t2 
    ON t2.Series = t1.Series 
    AND t2.Season = t1.Season 
    AND t2.Episode = t1.Episode 
ORDER 
    BY t1.Series 
    , t1.Season 
+0

太棒了!第一個完美的作品!有沒有一個使用任何一個或你的2? – Wingman1487

+0

我認爲第二個更好。內聯視圖't2'只返回最大季節的Episode的最大值。第一個查詢,我們得到每個季節的最大情節,這是比我們真正需要更多的「最大情節」行。在性能方面,我認爲這兩者不會有太大的區別......我們希望合適的索引定義爲'ON SeriesEpisodes(Series,Season,Episode)'。我們會看看EXPLAIN的輸出,並觀察性能(確保我們繞過查詢緩存,如果啓用了,則包含NOCACHE提示。) – spencer7593

+0

很酷!他們都工作,我看到第二個邏輯背後的邏輯更好一些。由於表格不是那麼大(至少尚未),性能並不是很大。非常感謝您的詳細回覆! – Wingman1487