leetcode 1285 找到连续区间的开始和结束数字(postgresql)

需求

表:Logs

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| log_id | int |

±--------------±--------+

id 是上表的主键。

上表的每一行包含日志表中的一个 ID。

后来一些 ID 从 Logs 表中删除。编写一个 SQL 查询得到 Logs 表中的连续区间的开始数字和结束数字。

将查询表按照 start_id 排序。

查询结果格式如下面的例子。

示例 1:

输入:

Logs 表:

±-----------+

| log_id |

±-----------+

| 1 |

| 2 |

| 3 |

| 7 |

| 8 |

| 10 |

±-----------+

输出:

±-----------±-------------+

| start_id | end_id |

±-----------±-------------+

| 1 | 3 |

| 7 | 8 |

| 10 | 10 |

±-----------±-------------+

解释:

结果表应包含 Logs 表中的所有区间。

从 1 到 3 在表中。

从 4 到 6 不在表中。

从 7 到 8 在表中。

9 不在表中。

10 在表中。

输入

输出

sql 复制代码
with t1 as (
-- 使用row_number对所有数据进行排序
-- 将log_id减去排序的序号,得到相同的书,就是连续的一组
select log_id,
   Logs.log_id-(row_number() over (order by log_id)) as rn1
from logs
)
-- 根据上面相减得到的数据分组,去除组内最大和最小值
select min(log_id) as start_id,
       max(log_id) as end_id
from t1
group by rn1
order by start_id
;
相关推荐
IT龟苓膏16 小时前
Redis 数据类型底层原理:SDS、quicklist、intset、skiplist、Bitmap、HyperLogLog 一篇讲清
数据库·redis·skiplist
sheeta199816 小时前
LeetCode 每日一题笔记 日期:2026.06.02 题目:3635. 最早完成陆地和水上游乐设施的时间 II
笔记·算法·leetcode
流星白龙16 小时前
【MySQL高阶】19.变更缓冲区,自适应哈希索引,日志缓冲区
数据库·windows·mysql
晴天¥16 小时前
Oracle中的监听配置与管理(动态、静态监听配置对比以及listener.ora和tnsnames.ora)
数据库·oracle
Lsk_Smion16 小时前
力扣实训 _ [102].层序遍历--前序--后续_递归与非递归的实现
数据结构·算法·leetcode
持敬chijing17 小时前
Web渗透之SQL注入-文件读写-木马植入
sql·安全·web安全·网络安全·安全威胁分析
瀚高PG实验室17 小时前
python连接HGDB超时
数据库·瀚高数据库·highgo
jnrjian17 小时前
ddl_lock_timeout 设置 read only table 通过view 实现细粒度依赖
sql·oracle
小欣加油18 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode
闪电悠米18 小时前
黑马点评-Redisson-01_why_redisson
java·服务器·网络·数据库·缓存·wpf