2012-10-18 70 views
1

這是我第一次在這裏提出問題。它對學習非常有幫助。從相關表中獲取每組最大行

我想選擇一個表,並獲取只有在其他表中的特定組具有最大值的行。其中一個非常接近但不太完美的答案是(SQL Select only rows with Max Value on a Column),但它只涉及單個表格。我發現了一些其他多表,但不知道如何使用它。

我有(簡體)

prodID, quantity, mach, etc

一個表,然後我有一個表

prodStatusID, prodID, userID, subStatusID

最後的表子狀態名稱

subStatusID, subStatusName

我正在嘗試獲取所有第一個表格和第二個表格的表格,但僅限於具有最大狀態編號幷包含正確狀態名稱的表格。
我現在可能並不重要但在一年或兩年這個事情開始真正填滿的其他事情是表現。我不知道它有選擇內部選擇,但如果我試圖返回所有產品,那麼它會爲每個生產做一個查詢。

只是爲了更清楚。在第二個表prodStatus中,可能有兩行,prodID爲4,但第一個的subStatusID爲1,第二個爲2. userID將不同。我想回來的是第二行,因爲它具有最高的狀態編號,我需要與該行關聯的userID和statusName。

我一直在谷歌上搜索2天得到這個答案,我看到約1拍賣,但我只是不完全,甚至研究之後理解它。

+0

你可以發佈你的架構樣本數據?在http://sqlfiddle.com –

回答

1

您需要創建一個子查詢,其中每個prodID的最大值爲subStatusID

SELECT a.*,  -- select only columns that you want to show 
     c.*,  -- asterisks means all columns 
     d.* 
FROM table1 a 
     INNER JOIN 
     (
      SELECT prodID, max(subStatusID) maxID 
      FROM table2 
      GROUP BY prodID 
     ) b ON a.prodID = b.prodID 
     INNER JOIN table2 c 
      ON b.prodID = c.prodID AND 
       b.maxID = c.subStatusID 
     INNER JOIN table3 d 
      ON c.subStatusID = d.subStatusID 
+0

這工作完美。我意識到我做錯了什麼。子選擇之後的兩個連接將加入原始選擇而不是子選擇。每個prodID我得到4個結果。非常感謝。 – BrinkDaDrink

+0

不客氣的隊友:D –

相關問題