通过增加SQL顺序来选择

时间:2014-11-03 22:35:03

标签: sql

表:

  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

期望的输出:

  id | year |     score 
-----+------+-----------
  16 | 2009 |     0.867
  16 | 2011 |     0.881
  16 | 2012 |     0.886
  16 | 2013 |     0.897
  16 | 2014 |     0.953

我在尝试输出相对于年度增加的分数时遇到了困难。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:7)

所以你想选择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;

然后,您可以选择所有&#34;增加&#34;使用联接的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;