Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-根据每年最后的值计算加权平均值的查询_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

SQL Server-根据每年最后的值计算加权平均值的查询

SQL Server-根据每年最后的值计算加权平均值的查询,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,假设我有来自美国职业棒球大联盟投手SQL表的以下列: player_id game_id season_ip | season_whip |career_ip 我们有以下数据: 502190 2013/04/18/miamlb-cinmlb-1 19 1.32 504 502190 2013/04/19/miamlb-cinmlb-1 19 1.32 504 502190 2013/06/11/cinmlb-chnmlb-1

假设我有来自美国职业棒球大联盟投手SQL表的以下列:

player_id   game_id             season_ip | season_whip |career_ip
我们有以下数据:

502190  2013/04/18/miamlb-cinmlb-1  19      1.32    504
502190  2013/04/19/miamlb-cinmlb-1  19      1.32    504
502190  2013/06/11/cinmlb-chnmlb-1  73      1.32    558
502190  2013/06/13/cinmlb-chnmlb-1  81      1.24    566
502190  2013/09/29/pitmlb-cinmlb-1  192     1.25    677
502190  2014/04/22/cinmlb-pitmlb-1  28      0.99    705
502190  2014/05/26/cinmlb-lanmlb-1  71      1.06    748
502190  2014/09/28/pitmlb-cinmlb-1  214     1.25    891
502190  2015/03/25/texmlb-cinmlb-1  14      0.71    891
502190  2015/08/15/wasmlb-sfnmlb-1  143     1.17    1034

453286  2013/05/05/detmlb-houmlb-1  39      1.04    844
453286  2013/05/16/detmlb-texmlb-1  54      0.99    859
453286  2013/09/29/detmlb-miamlb-1  214     0.97    1019
453286  2014/06/18/kcamlb-detmlb-1  98      1.25    1117
453286  2014/07/15/nasmlb-aasmlb-1  126     1.17    1145
453286  2014/09/28/minmlb-detmlb-1  220     1.18    1239
453286  2015/03/22/wasmlb-detmlb-1  14      0.93    1239
453286  2015/08/15/wasmlb-sfnmlb-1  165     0.9     1404
我需要一个SQL查询,根据
赛季ip
(投球局数)获得每个
球员id
赛季鞭的加权平均数。
我只想使用每年的最后一个条目(请注意,
game\u id
列包含年份)。因此,对于
玩家id
50219,2015年的最后一个条目是
游戏id
2015/08/15/wasmlb-sfnmlb-1
,2014年是
游戏id
2014/09/28/pitmlb-cinmlb-1

加权平均的公式为:

sum(season_ip * season_whip) / sum(season_ip)   
例如,
player_id
50219,他的鞭子是

[192 * 1.25 + 214 * 1.25 + 143 * 1.17] / [192 + 214 + 143] = 1.229
我加入了职业ip,因为它是所有年份中唯一会增加的价值。
季节ip
每年都会重置,而
季节ip
全年都会变化


感谢您的帮助。我正在使用SQL Server 2014

试试这样的东西


听起来你想得到每名球员每年的最后一行,然后对这些行进行分组,以获得球员鞭子的调整权重。如果是这样,您可以使用
row\u number()
仅获取每位玩家每年的最后一行,然后再进行加权平均分组:

  select player_id, sum(season_ip * season_whip) / sum(season_ip) 
  from (
    select * ,
      row_number() over (partition by player_id, left(game_id,4) order by game_id desc) rn 
    from
    mytable
  ) t1 where rn = 1
  group by player_id

为什么使用
192.1
214.1
。。。这些不是示例数据中的值。在您的数据中,这些都是整数。我不明白为什么要包含
career\u ip
,该值不用于计算加权平均值。另外,下次尝试提供SQLFIDLE时,这会有很大帮助。@JuanCarlosOropeza I将192.1修改为192,并将214.1修改为214,以使表中的内容更加清晰。我忘了修改鞭子的计算。我会更新的。谢谢。谢谢你的帮助!对于我提供的数据集,这个答案在sqlfiddle中有效,但由于某些原因,它不能在我的SQL完整数据集上工作。我不知道发生了什么事。胡安·卡洛斯·奥罗佩扎的答案是有效的,所以我还是坚持这个答案。@bbgoldm也许你应该多检查一下或者提供一个更大的样本。因为我们的解决方案几乎是一样的。
  select player_id, sum(season_ip * season_whip) / sum(season_ip) 
  from (
    select * ,
      row_number() over (partition by player_id, left(game_id,4) order by game_id desc) rn 
    from
    mytable
  ) t1 where rn = 1
  group by player_id