首页 > 解决方案 > 如何编写 SQL 查询来选择得分高于上一年的击球手

问题描述

鉴于此表:

Name     Score   Year
----------------------
Richie    50     2017
Richie    40     2016
Richie    30     2015
Mark      20     2017
Mark      30     2016
Smith     60     2015
Smith     50     2014

选择击球手,得分大于前一个得分的得分。

例如,这里的输出应该是

Richie  50   2017
Richie  40   2016
Smith   60   2015

我不知道如何得到这个答案 - 到目前为止我的尝试:

select Name, score
from table
order by score ...

输出应该是

Richie  50   2017
Richie  40   2016
Smith   60   2015

标签: sqlsql-serversql-server-2008

解决方案


使用lag()

select t.*
from (select t.*, lag(score) over (partition by name order by year) as prev_score
      from t
     ) t
where score > prev_score;

推荐阅读