2017-05-24 70 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参赛哪支球队?

我无法回答这个问题。

2.)对于每个球员,我们怎么能得到他们得分最高的球队?

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

请,两种解决方案。

回答

0

#1:

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 ...感谢您的回复。我对第一个查询有疑问,我们可以用这样的方式写一个查询:“Where'2015-01-01'start_date和end_date之间”。我总是写下如下查询:“2015-01-01'和'2015-03-01' – Drishti

+0

之间的Start_date是,您可以在”start_date和end_date之间“编写查询”Where'2015-01-01“。 “从选手队伍中选择队伍(从队员中选择最大(点数))”查询会发现拥有一名队员的队伍得分与任何队员的最高分数相同。 – 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