leetcode 1285 找到连续区间的开始和结束数字---窗口函数的妙用

找到连续区间的开始和结束数字
这题题目就给了一张表,题目非常的短,但是没有想好思路,实则非常难处理。这个地方我们可以使用窗口函数进行辅助解题。思路如下:

logidrow_number()log_id-row_number()
110
220
330
743
853
1064

通过上面的使用row_number()排名后再相减,我们能发现,连续的数字相减的结果是相同的,那么我们使用这个辅助列group 不要后求最大最小即可。
首先先排名

select log_id,row_number() over(order by log_id) rr from Logs

排名后相减

select log_id,log_id-rr lr from (
select log_id,row_number() over(order by log_id) rr from Logs) F1

对相减的结果求最大最小即可得出结果

select min(log_id) start_id,max(log_id) end_id from (
select log_id,log_id-rr lr from (
select log_id,row_number() over(order by log_id) rr from Logs) F1) F2 group by lr order by start_id

最后提交结果如下:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值