力扣【SQL连续问题】

打印 上一主题 下一主题

主题 949|帖子 949|积分 2847

180. 连续出现的数字



  1. SELECT DISTINCT if(a.num = b.num AND b.num = c.num,a.num,null) AS ConsecutiveNums
  2. FROM Logs a
  3. LEFT OUTER JOIN Logs b
  4. ON a.id+1 = b.id
  5. LEFT OUTER JOIN Logs c
  6. ON a.id+2 = c.id
  7. WHERE if(a.num = b.num AND b.num = c.num,a.num,null) IS NOT NULL
复制代码
603. 连续空余座位



  1. SELECT a.seat_id AS seat_id
  2. FROM Cinema a
  3. LEFT OUTER JOIN Cinema b
  4. ON a.seat_id + 1 = b.seat_id
  5. LEFT OUTER JOIN Cinema c
  6. ON a.seat_id - 1 = c.seat_id
  7. WHERE a.free = 1 AND (b.free = 1 OR c.free = 1)
  8. ORDER BY seat_id
复制代码
  1. -- 执行速度慢
  2. SELECT DISTINCT a.seat_id AS seat_id
  3. FROM Cinema a
  4. LEFT OUTER JOIN Cinema b
  5. ON ABS(a.seat_id - b.seat_id) = 1
  6. WHERE a.free = 1 AND b.free = 1
  7. ORDER BY seat_id
复制代码
613. 直线上的最近间隔



  1. -- 方法一:
  2. SELECT MIN(ABS(a.x - b.x)) AS shortest
  3. FROM Point a
  4. LEFT OUTER JOIN Point b
  5. ON a.x <> b.x
复制代码
  1. -- 方法二:
  2. select  x - lag(x) over(order by x) as shortest
  3.   from point
  4. order by shortest
  5. limit 1
  6. offset 1
复制代码
  1. -- 方法二中的中间输出
  2. select  x,
  3.                 lag(x) over(order by x) AS lag_x,    -- 取比每个 x 小的值中,但又最靠近x(数值上最大的)的那一个值
  4.                   x - lag(x) over(order by x) as shortest  -- 计算每个 x 与其 lag_x 之间的距离
  5.   from point
复制代码

  1285. 找到连续区间的开始和结束数字



①先给每个数进行排名
②用这些数减去自己的排名,如果减了之后的结果是一样的,说明这几个数是连续的
(原理:等差数列的值,减去等差数列的值,结果才能是一样的。)

③用logid减去排名得出来的数进行group by,也就是把连续的数全都放在一个一个小组里面,求出每个小组的最大值和最小值就可以了
  1. SELECT MIN(a.log_id) AS START_ID, MAX(a.log_id) AS END_ID
  2. FROM (SELECT log_id,
  3.         ROW_NUMBER() OVER (ORDER BY log_id ASC) rn,
  4.         log_id - ROW_NUMBER() OVER (ORDER BY log_id ASC) reference
  5.       FROM Logs) a
  6. GROUP BY a.reference
  7. ORDER BY start_id
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表