表:
id | year | score
-----+------+-----------
12 | 2011 | 0.929
12 | 2014 | 0.933
12 | 2010 | 0.937
12 | 2013 | 0.938
12 | 2009 | 0.97
13 | 2010 | 0.851
13 | 2014 | 0.881
13 | 2011 | 0.885
13 | 2013 | 0.895
13 | 2009 | 0.955
16 | 2009 | 0.867
16 | 2011 | 0.881
16 | 2012 | 0.886
16 | 2013 | 0.897
16 | 2014 | 0.953
Run Code Online (Sandbox Code Playgroud)
期望的输出:
id | year | score
-----+------+-----------
16 | 2009 | 0.867
16 | 2011 | 0.881
16 | 2012 | 0.886
16 | 2013 | 0.897
16 | 2014 | 0.953
Run Code Online (Sandbox Code Playgroud)
我在尝试输出相对于年度增加的分数时遇到了困难.任何帮助将不胜感激.
所以你想选择id= 16,因为它是唯一一个稳定增加值的人.
许多版本的SQL支持lag(),可以帮助解决这个问题.对于给定的id,您可以通过执行以下操作来确定所有值是增加还是减少:
select id,
(case when min(score - prev_score) < 0 then 'nonincreasing' else 'increasoing' end) as grp
from (select t.*, lag(score) over (partition by id order by year) as prev_score
from table t
) t
group by id;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用联接选择所有"增加"ID:
select t.*
from table t join
(select id
from (select t.*, lag(score) over (partition by id order by year) as prev_score
from table t
) t
group by id
having min(score - prev_score) > 0
) inc
on t.id = inc.id;
Run Code Online (Sandbox Code Playgroud)