题77:
根据下表编写一个 SQL 查询得到 Logs 表中的连续区间的开始数字和结束数字,将查询表按照 start_id 排序。
解题思路:先将连续的数组分组,后找到每组首、尾
利用ROW NUMBER()即可,
(1)从表中查出所有的log_id,并且用row_number(order by log_id asc )排列出每个数的行号reference,查询的结果为t表;
(2)根据t表的reference进行分组,查询每组的reference对应的最大和最小数,然后按照log_id升序排列。
select min(log_id) start_id ,max(log_id) end_id
from(
select distinct log_id,log_id - row_number() over (order by log_id asc) reference
from Logs
) t
group by reference
order by start_id;