2014-10-02 77 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