oracle连续出现3次数字,Oracle SQL-将连续数字设置为范围

在此问题中,您必须确定连续几周的顺序并将其分组.这是我的解决方案.

>使用LAG功能识别序列中的任何中断.

>使用SUM功能为每个序列分配一个组号.

>在每个组中找到开始和结束的一周.

>最后,使用LISTAGG函数汇总结果.

查询:

with x(wk, cost, startgroup) as(

--identify the start of a sequence

select wk, cost,

case when wk = lag(wk,1) over (partition by cost order by wk) + 1

then 0

else 1

end

from mytable

where id = '345'

),

y(wk, cost, grp) as(

--assign group number

select wk, cost,

sum(startgroup) over (partition by cost order by wk)

from x

),

z(wk, cost, grp) as(

--get the max/min week for each group

select case when min(wk) = max(wk)

then cast(min(wk) as varchar2(10))

else min(wk) ||'-'||max(wk)

end,

cost, grp

from y

group by cost, grp

)

--aggregate by cost

select listagg(wk,',') within group(order by grp),

cost

from z

group by cost;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值