2017-05-24 5 views
-3
player  team   start_date end_date points 
John Jacob SportsBallers 2015-01-01 2015-03-31 100 
John Jacob SportsKings 2015-04-01 2015-12-01 115 
Joe Smith PointScorers 2014-01-01 2016-12-31 125 
Bill Johnson SportsKings 2015-01-01 2015-06-31 175 
Bill Johnson AllStarTeam 2015-07-01 2016-12-31 200 

を必要としていました。私はインタビューで以下の質問をしました。高度なSQLクエリの解決策は、上記の表では、より多くの行があり

1.)各プレイヤーは、どのチームが2015-01-01でプレイしたのですか?

私はこの1つに答えることができませんでした。

2.)各プレーヤーについて、最も得点の高いチームをどのように獲得できますか?

select team from Players 
where points in (select max(points) from players group by player). 

してください、両方のためのソリューション。 #1のために

答えて

0

Select Player 
     ,Team 
From table 
Where '2015-01-01' between start_date and end_date 

#2の場合:プレイヤーから

select t.Player 
     ,t.Team 
from table t 
inner join (select Player 
        ,Max(points) 
      from table 
      group by Player) m 
    on t.Player = m.Player 
    and t.points = m.points 
+0

選択チームどこにポイントがありますか(プレイヤーごとに選んだプレイヤーの最大値を選んでください) - これは間違っていますか? – Drishti

+0

こんにちはDegan ...あなたのお返事ありがとうございます。私は最初のクエリで疑問を抱くことがあります。このような方法でクエリを書くことができます "どこで '' start_dateとend_dateの間に '2015-01-01'。私はいつもあなたの。」 『2015年1月1日』と 『2015年3月1日』の間のどこSTART_DATE – Drishti

+0

はい、クエリを書くことができ、 『どこで『2015年1月1日』』 START_DATEとend_dateの間のようなクエリを書かれていますクエリが任意のプレイヤーの最大のポイントのポイントの同じ数を獲得したプレーヤーを持っているチームを見つけるでしょう「(プレイヤーがプレイヤーのグループから最大値(ポイント)を選択)内のポイントは、選手からチームを選択して」。あなたの応答のための – Degan

1
select * 
from PlayerTeams 
where startdate <='2015-01-01' and enddate >= '2015-01-01' 
Select player, team, points 
from( 
Select *, row_number() over (partition by player order by points desc) as rank 
From PlayerTeams) as player 
where rank = 1 
関連する問題