ORACLE条件COUNT查询

时间:2018-04-17 18:24:36

标签: sql oracle

001 | 9441 | P021948  
001 | 9442 | P021948  
001 | 9443 | P021950  
001 | 9444 | P021951  
001 | 9445 | P021952  
001 | 9446 | P021948  

在上表中,我希望对第三列进行计数,只要它超出第二列的值(+/- 1)。

换句话说,我正在尝试为P021948实现2的计数,因为值9441和9442在彼此的1之内并且记录9446在该范围之外。我的目的是在这些条件下达到总计5个。

我怎么去查询?

非常感谢任何建议!

2 个答案:

答案 0 :(得分:1)

select column1, column3, 
sum(case when lag(column3, 1, 0) over(order by column3)=column3 or  
    lead(column3, 1, 0) over(order by column3)=column3 then 1 else 0 end)
from yourtable
        group by column1, column3

答案 1 :(得分:1)

嗯,我想你想要计算被大于1的值分隔的“岛屿”。如果是这样的话:

select count(*)
from (select t.*, lag(col2) over (partition by col1, col3 order by col2) as prev_col2
      from t
     ) t
where prev_col2 is null or col2 - prev_col2 > 1;

以下是查询和结果的rextester插图。