时间:2017-08-15 17:52:31

标签: sql database oracle

我有一个忽略从前一个值增加的值的查询。例如,请使用下表:

col1    col2    col3
5       1       A
4       2       A
6       3       A
9       4       B
8       5       B
10      6       B

现在进行以下查询:

select col1
from (select col1, lag(col1) over (order by col2) as prev_value
  from test
 ) 
where prev_value is null or prev_value > col1;

现在查询按预期工作,因为它忽略了col1 = 6,9和10的列,因为前一个值较小。现在我试图解决的问题是它在一个组的基础上这样做。所以我只希望它忽略以col3分组的先前值。所以我想要忽略6和10而不是9,因为按col3 9分组时不会有先前的值。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:4)

我想你只想要partition by

select col1
from (select col1, lag(col1) over (partition by col3 order by col2) as prev_value
      from test
     ) 
where prev_value is null or prev_value > col1;