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
;
相关推荐
悲伤小伞14 分钟前
9-MySQL_索引
linux·数据库·c++·mysql·centos
霖霖总总20 分钟前
[Redis小技巧24]Redis主从复制深度解剖:不只是SLAVEOF,Redis主从复制背后的RunID、Backlog
数据库·redis
灰色小旋风30 分钟前
力扣19删除链表的倒数第N个结点(C++)
c++·算法·leetcode·链表
不吃香菜学java32 分钟前
苍穹外卖-菜品分页查询
数据库·spring boot·tomcat·log4j·maven·mybatis
狼与自由32 分钟前
Redis 分布式锁
数据库·redis·分布式
skiy41 分钟前
redis 使用
数据库·redis·缓存
mygljx44 分钟前
Redis 下载与安装 教程 windows版
数据库·windows·redis
奕成则成1 小时前
Redis 大 Key 问题排查与治理:原因、危害、实战方案
数据库·redis·缓存
Hoshino.411 小时前
基于Linux中的数据库操作——例题实操(3)
数据库
dapeng28701 小时前
Python异步编程入门:Asyncio库的使用
jvm·数据库·python