2016-11-28 20 views
0

このクエリの問題は、いくつかの箇所で "古典的SQL問題"と呼ばれています。私は解決策を見つけることができませんでした。問題は、Samが2つのヒートで同じスピードを持つため、結果に重複を避ける方法を見つけることができないということです。出発点"クラシック" SQLクエリの問題、重複を回避する方法

は競争から時系列「結果」テーブルです:私が欲しいもの

Id Name Club  Engine  Class Heat Speed 
1 Joe  NYRC  Rotax  Senior 1  320 
2 Sam  GMRK  HQ   Senior 1  280 
3 Adam HCRC  Rossi  Senior 1  180 
4 Rick NYRC  Ford  Junior 1  220 
5 Joe  NYRC  Rotax  Senior 2  330 
6 Sam  GMRK  HQ   Senior 2  280 
7 Adam HCRC  Rossi  Senior 2  190 
8 Joe  NYRC  Rotax  Senior 3  300 
9 Sam  GMRK  HQ   Senior 3  210 
10 Adam HCRC  Rossi  Senior 3  200 

は、最良の結果の後に注文したクラスごとの結果一覧です:

Pos Name Club  Engine  Class Heat Speed 
1 Joe  NYRC  Rotax  Senior 2  330 
2 Sam  GMRK  HQ   Senior 1  280 
3 Adam HCRC  Rossi  Senior 3  200 

私はにできていますどのような取得:

次のクエリを使用して
Pos Name Club  Engine  Class Heat Speed 
1 Joe  NYRC  Rotax  Senior 2  330 
2 Sam  GMRK  HQ   Senior 2  280 
3 Sam  GMRK  HQ   Senior 1  280 
4 Adam HCRC  Rossi  Senior 3  200 

select yt.Name, yt.Club, yt.Engine, yt.Class, yt.Heat, yt.Speed 
from Result yt 
where Speed = (select max(Speed) from Result st where yt.Name=st.Name) 
AND Class = 'Senior' 
Order by Speed DESC 

どこか別のものを適用することは私にとっては良い考えですが、私は成功することができませんでした!サポート

+0

: //sqlfiddle.com)をテストデータと望みの結果と組み合わせれば、私たちがあなたを助けてくれるはずです。 –

+0

あなたはどのプラットフォームを使用していますか? – Hogan

+2

ヒートには2つの異なる値がありますが、どの値を保持したいですか? –

答えて

0

ため

おかげただ、他のすべてのフィールドで最大(スピード)とグループを取得:あなたが望むものを完全には明らかではありませんが、[sqlfiddle](HTTPを作成する場合

select yt.Name, yt.Club, yt.Engine, yt.Class, yt.Heat, max(yt.Speed) as MaxSpeed 
from Result yt 
where Class = 'Senior' 
group by Name, Club, Engine, Class, Heat 
Order by MaxSpeed DESC 
+0

私は彼が最高の結果の行を望んでいると思う。 – Hogan

+0

このクエリは、すべてのシニアレコードをスピード順に指定しました。 –

関連する問題