2014-10-02 84 views
0

以下代碼不能正常工作。SQL(php)需要提取最好記錄

SELECT Species, FishName, Rank, Angler, lb, oz, dr, Drams, Peg, DateCaught 
FROM 
    (SELECT Species, FishName, Rank, Angler, lb, oz, dr, Drams, Peg, DateCaught 
     FROM ConqPB 
     ORDER BY FishName, Drams DESC) a 
WHERE Species = 'Common Bream' 
GROUP BY FishName 
ORDER BY Species ASC, Rank ASC, Drams ASC 

它是鯿的物種名單,並會顯示每個魚類名稱和深陷其中的垂釣者頂部權重的記錄列表。

但是由於一些未知的原因 - 我沒有編輯它,它已經停止工作,現在只返回一個最好的釣魚者,而不是最好的釣魚者。

內部聲明已經測試正常,並返回一個魚名稱列表並按desc順序排列重量(drams)。當顯示這個時,每個魚名的最高記錄是最高的捕獲重量。外面的聲明現在失敗了。

這裏的任何幫助將非常感激。我也想知道爲什麼它停止工作。

一個例子:

Species   FishName    Drams    Angler 
Common Bream  Henry     300    Peter Beard 
Common Bream  Henry     400    Harry Web 
Common Bream  Henry     0     Carl Pilk 
Common Bream  Darcy     0     Peter Beard 
Common Bream  Darcy     760    Harry Web 
Common Bream  Darcy     900    Carl Pilk 

其結果將是

鯿記錄

Fishname    Drams     Angler 
Henry    400     Harry Web 
Darcy    900     Carl Pilk 
+0

你可以設置一個[SQL小提琴](http://sqlfiddle.com)?至於爲什麼它停止工作,我們不能告訴你。如果它的工作原理是昨天而不是今天,我會查看原始數據以確保它沒有被消除或以某種方式改變。 – 2014-10-02 13:05:33

+0

子查詢有什麼意義?你爲什麼不直接查詢'ConqPB'? – wavemode 2014-10-02 13:08:02

+0

數據沒有問題。在內部聲明中,它按照它應該組織它,但外部聲明失敗。 – 2014-10-02 13:09:24

回答

0
select 
* 
from 
t 
inner join (
    select 
    species, fishname, max(drams) as maxdrams 
    from 
    t 
    group by species, fishname 
) sq on t.species = sq.species and t.fishname = sq.fishname and sq.maxdrams = t.drams 
+0

這是我不明白的代碼,它的工作原理和完美,但是當它被用作在我的網站上運行的php腳本時,它會以各種可能的方式失敗 - 這也是挖掘只有一個名字,我已經檢查過主表,所有的信息都存在,所以不知道爲什麼它不能在網站上工作,我問過主機是否因爲我沒有改變任何東西! ! – 2014-10-02 15:51:00

+0

有沒有可能在託管站點內發生了一些可能會干擾我的Sql是如何使用PHP腳本執行的內容?fancyPants演示的工作原理很漂亮,但它不能在我的站點上高效工作,它仍然只打印出一個垂釣者的名字。 – 2014-10-02 16:02:23

+0

我也很確定Max函數從未在我的PHP腳本中正常工作。 – 2014-10-02 16:11:54