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
;
相关推荐
DBA小马哥1 分钟前
Oracle迁移金仓全攻略:工业IOT场景下的易用性与安全保障
数据库·物联网·安全·oracle
‘胶己人’2 分钟前
redis分布式锁
数据库·redis·分布式
初恋叫萱萱13 分钟前
基于CodeRider-Kilo和MySQL开发一款书店管理系统
数据库·mysql·产品运营
hid6466372217 分钟前
基于改进粒子群算法的无人机三维路径规划——MATLAB运行效果图
sql
Elastic 中国社区官方博客17 分钟前
通过 Elasticsearch 中的 function score query 按利润和受欢迎程度提升电商搜索效果
大数据·数据库·elasticsearch·搜索引擎·全文检索
qq_3663363721 分钟前
mysql-5.7.38-winx64.zip 启动教程(免安装版)
数据库·mysql·adb
不穿格子的程序员23 分钟前
Redis篇5——Redis深度剖析:系统的“隐形杀手”——热Key与大Key问题
数据库·redis·缓存·热key·大key
·云扬·33 分钟前
深入理解MySQL元数据锁(MDL):原理、问题与实践
数据库·mysql
guoyiguang235 分钟前
mysql in 查询 没有限制1000个,默认是sql大小4M大小
数据库·sql·mysql
Hello.Reader1 小时前
Flink SQL 的 USE / USE CATALOG / USE MODULES(Catalog、Database、Module 三件套)
数据库·sql·flink