Oracle Group基于下一行值

时间:2017-03-06 13:21:41

标签: sql oracle

我们试图通过检查下一行值来获得结果组。

示例数据

Table A

COL1 COL2 COL3
---- ---- ----
B    BUY     1
B    SELL  1.2
B    SELL    2
C    BUY     3
C    SELL    4
C    BUY     5

结果

COL1 COL2 COUNT(1)
---- ---- --------
B    BUY         1
B    SELL        2
C    BUY         1
C    SELL        1
C    BUY         1

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以通过行号方法的不同来做到这一点:

select col1, col2, count(*)
from (select t.*,
             row_number() over (partition by col1 order by col3) as seqnum,
             row_number() over (partition by col1, col2 order by col3) as seqnum_2,
      from t
     ) t
group by col1, col2, (seqnum - seqnum_2);

根据col2中的排序,识别相邻col3值组。

答案 1 :(得分:0)

您似乎已按COL3订购;如果是这种情况,那么:

SELECT col1,
       col2,
       change - COALESCE( LAG( change ) OVER ( PARTITION BY col1 ORDER BY change ), 0 )
         AS cnt
FROM   (
  SELECT col1,
         col2,
         CASE LEAD( col2 ) OVER ( PARTITION BY col1 ORDER BY col3 )
           WHEN col2
           THEN NULL
           ELSE ROW_NUMBER() OVER ( PARTITION BY col1 ORDER BY col3 )
         END AS change
  FROM   a
)
WHERE  change IS NOT NULL;