需要对 SQL 中的值进行分组
Need to group values in SQL
下面是我的 table 数据结构。
select 100 id, 1 srno,0 amt from dual
union all
select 100 id, 2 srno, 1000 amt from dual
union all
select 100 id, 3 srno, 1000 amt from dual
union all
select 100 id, 4 srno, 0 amt from dual
union all
select 100 id, 5 srno, 2000 amt from dual
我想要这样的结果,
ID From_Srno To_Srno amt
100 1 1 0
100 2 3 1000
100 4 4 0
100 5 5 2000
谢谢,
名望
这是一个 gaps-and-island 问题,您希望将具有相同 amt
.
的“相邻”行组合在一起
我建议使用行号之间的差异来定义组:
select id, min(srno) from_srno, max(srno) max_srno, amt
from (
select t.*,
row_number() over(partition by id order by srno) rn1,
row_number() over(partition by id, amt order by srno) rn2
from mytable t
) t
group by id, amt, rn1 - rn2
ID | FROM_SRNO | MAX_SRNO | AMT
--: | --------: | -------: | ---:
100 | 1 | 1 | 0
100 | 2 | 3 | 1000
100 | 4 | 4 | 0
100 | 5 | 5 | 2000
下面是我的 table 数据结构。
select 100 id, 1 srno,0 amt from dual
union all
select 100 id, 2 srno, 1000 amt from dual
union all
select 100 id, 3 srno, 1000 amt from dual
union all
select 100 id, 4 srno, 0 amt from dual
union all
select 100 id, 5 srno, 2000 amt from dual
我想要这样的结果,
ID From_Srno To_Srno amt
100 1 1 0
100 2 3 1000
100 4 4 0
100 5 5 2000
谢谢, 名望
这是一个 gaps-and-island 问题,您希望将具有相同 amt
.
我建议使用行号之间的差异来定义组:
select id, min(srno) from_srno, max(srno) max_srno, amt
from (
select t.*,
row_number() over(partition by id order by srno) rn1,
row_number() over(partition by id, amt order by srno) rn2
from mytable t
) t
group by id, amt, rn1 - rn2
ID | FROM_SRNO | MAX_SRNO | AMT --: | --------: | -------: | ---: 100 | 1 | 1 | 0 100 | 2 | 3 | 1000 100 | 4 | 4 | 0 100 | 5 | 5 | 2000