sql - 如何编写 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
解决方案
使用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;
推荐阅读
- flutter - 我想在我的颤振应用程序上正确加载其他屏幕
- amazon-web-services - 插值数据源
- javascript - 如何根据属性键过滤对象属性?
- c# - 在自定义 JSON 转换器中忽略具有属性的属性
- laravel - Laravel:跨数据透视表查询特定行
- rest - Blazor Webassembly 项目调用 REST API
- angular - Angular:为什么在“if 语句”中可以使用 const 作为布尔值?
- visual-studio-2019 - Visual Studio 2019 Release 文件夹中的哪些文件应该上传到 GitHub?
- c - 在没有 btsl 指令的情况下使用 inline asm 设置位
- node.js - 如何替换在 docker 容器内运行的 react js 应用程序的品牌资源(徽标、背景图像)