2013-08-26 115 views
0

出於某種原因,我無法獲得此查詢以返回我正在查找的結果。我解釋說,概括後的情況......使用INNER JOIN和MAX()返回與MAX相同的行

有兩個表,一個是球員,一個用於比賽。在每場比賽中,一名球員根據他們的位置得到一個等級(浮點/小數)。這個等級可能在一個位置上得到改善,但在其他位置可能會有所不同/更好。因此,我希望能夠看到MAX(評級)pos最大值取自以及玩家詳細信息

所以,我的想法是做到以下幾點:

SELECT * 
FROM players 
     INNER JOIN(SELECT pid, 
         Max(rating) AS a, 
         pos 
        FROM matches 
        GROUP BY pid) b 
       ON b.pid = players.ypid 
WHERE players.ytid = '2010591' 
    AND players.status = '1' 
ORDER BY ypromdate ASC, 
      ydob ASC 

這並返回所有玩家的細節和最高等級,但是如果玩家已在多個比賽(因此GROUP BY)打那麼第一條記錄返回pos。例如,如果player1獲得了5作爲後衛的評分,然後6作爲轉發,則該查詢將返回6後衛

如果需要更多信息,那麼我很樂意提供!

謝謝advance..feel就像我已經採取了查詢沿着錯誤的路線..

編輯幫助回答問題發佈:

軟件:MySQL的

阿帕奇/2.2.15(CentOS)

數據庫客戶端版本:libmysql - 5.1.69

樣本數據,減少以節省時間:

匹配表:ID,matchid,matchdate,位置,timeplayed,等級,PID
(149,77221704,「2013年8月12日15:00:00',100,90,1。5,143569504),

(150,77221705, '2013年9月12日15:00:00',103,90,3,143569504)

Players表:PID,ytid,狀態 (143569504,2010591,1)

預期結果:

PID,ytid,狀態,POS,最大(額定) 143569504,2010591,1,103,3

當前結果:

PID,ytid,狀態,POS機,最大(額定) 143569504,2010591,1,100,3

+0

一些示例數據和期望的輸出將會很有幫助,而且,您正在使用哪個數據庫(MySQL,SQL Server 2008等)? –

+0

它的mysql,沒有別的將允許通過子查詢在組中選擇pos。而且存在着錯誤價值的主要原因。 – piotrm

+0

請參閱上面的編輯,希望這可以幫助 – user2718534

回答

1

像這樣的東西應該工作

select yourfields (not all of them) 
from players p join matches m on m.pid = p.pid 
join (select pid, max(rating) maxrating 
from matches 
group by pid) temp on p.pid = temp.pid and rating = maxrating 
etc 
+0

這正是我要求它做的事情,我會及時接受和標記它。一個最終的請求讓你的腦海裏浮現出來。運行這個查詢給了我:顯示行0 - 16(共17個,查詢花了252.0127秒)。這是否滯後於我的數據庫結構或查詢本身?如果是後者,這可以改進嗎?我感謝您解決問題! – user2718534