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
;
相关推荐
夜泉_ly26 分钟前
MySQL -安装与初识
数据库·mysql
qq_529835351 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
StickToForever2 小时前
第4章 信息系统架构(五)
经验分享·笔记·学习·职场和发展
月光水岸New4 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6754 小时前
数据库基础1
数据库
我爱松子鱼4 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo4 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser5 小时前
【SQL】多表查询案例
数据库·sql
Galeoto5 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)6 小时前
MySQL主从架构
服务器·数据库·mysql