用于检测播放器的分数或评级更改的SQL

时间:2016-04-01 20:39:50

标签: sql

说我有一张桌子可以跟踪球员和球员。根据日期的最后得分。

示例记录

playerA 100 March3
playerA 120 March4
playerA 10 March10
playerB 89 March11
playerB 50 March11
playerC 200 March12

我想知道所有那些在某一天的分数或评分下降了80%的球员(与之前的分数相比)

如何围绕这个写一个有效的查询?

1 个答案:

答案 0 :(得分:1)

ANSI标准方法是使用lag()。这假定最后一列是真正的日期,而不是一些模糊的字符串表示。

这个想法是:

select t.*
from (select t.*, lag(score) over (partition by player order by date) as prev_score 
      from t
     ) t
where prev_score <= score * (1 - 0.8)