首页 > 数据库 >【LeetCode 2494. 合并在同一个大厅重叠的活动】MySQL用户变量编程解决区间合并问题

【LeetCode 2494. 合并在同一个大厅重叠的活动】MySQL用户变量编程解决区间合并问题

时间:2024-01-13 15:22:51浏览次数:49  
标签:end interval 合并 2494 hall MySQL farest id day

题目地址

https://leetcode.cn/problems/merge-overlapping-events-in-the-same-hall/

代码

# Write your MySQL query statement below

with t2 as(
    select 
    *

    # ----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序执行的”-----------

    -- 如果切换hall_id了,一些变量需要改变
    ,(case when (@prev_hall_id is null or @prev_hall_id<>hall_id) then @farest_interval_start:=start_day end)
    ,(case when (@prev_hall_id is null or @prev_hall_id<>hall_id) then @farest_interval_end:=end_day end)
    ,(case when (@prev_hall_id is null or @prev_hall_id<>hall_id) then @interval_id := @interval_id +1 end)
    

    -- 如果新区间的开始要晚于维护区间的结尾,那么开启新区间
    , (case when @farest_interval_end < start_day then @interval_id := @interval_id +1 else @interval_id end) as interval_id
    , (case when @farest_interval_end < start_day then @farest_interval_start:=start_day end)
    , (case when @farest_interval_end < start_day then @farest_interval_end:=end_day end)
    


    -- 如果新区间的开始不晚于维护区间的结尾,可能会发生区间的合并。由于我们已经按照start_day asc, end_day asc排序了。所以只可能更新@farest_interval_end
    ,(case when @farest_interval_end < start_day then "whatever" else
        (case when @farest_interval_end <= end_day then @farest_interval_end:= end_day end)
    end)
    

    , @farest_interval_start as farest_interval_start
    , @farest_interval_end as farest_interval_end
    , @prev_hall_id := hall_id

    # ----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序执行的”-----------

    from (select * from HallEvents order by hall_id asc, start_day asc, end_day asc)  sorted_HallEvents,
    (select @prev_hall_id := null, @farest_interval_start := null, @farest_interval_end := null, @interval_id := 0) vars
)


select hall_id, farest_interval_start as start_day
, farest_interval_end as end_day 
from 
(select *,
row_number() over(partition by interval_id order by start_day desc, end_day desc) as rn
from t2) tmp1
where rn=1
order by  hall_id, start_day, end_day  

标签:end,interval,合并,2494,hall,MySQL,farest,id,day
From: https://www.cnblogs.com/yhm138/p/17962393

相关文章

  • 如何处理Mysql死锁
    如何处理Mysql死锁学习改变命运,技术铸就辉煌。大家好,我是銘,全栈开发程序员。Mysql死锁问题是众多开发人员和DBA无法避开的挑战,那今天我们就来聊一聊Mysql死锁的问题。什么是数据库死锁当不同的事务在获取资源的时候互相等待,导致数据库操作无法继续执行。这就是死锁,那......
  • MySQL事务与隔离
    事务假设你想给张三转账500块钱,这时需要扣除你卡上的账户余额,并同时给张三卡上增加500块钱。如果转账的两个操作中的一个失败,那你就可能损失金钱或者让金钱消失不见,张三也就收不到钱了。这时,事务就派上用场了。它可以保证这两个操作要么同时成功,要么同时失败,绝不会出现一半成功一半......
  • 【LeetCode1747. 应该被禁止的 Leetflex 账户】MySQL用户变量编程;尝试维护一个multise
    题目地址https://leetcode.cn/problems/leetflex-banned-accounts/description/代码witht1as(selectaccount_id,ip_address,loginastick,"login"asmytypefromLogInfounionallselectaccount_id,ip_address,logoutastick......
  • 9 表操作之删除数据 -- MySQL数据库
    如果记录不再需要,则可以用delete命令进行删除。1.删除数据a.语法mysql>deletefrom表名[where条件];b.实例实例: --在emp中将ename为'dony'的数据全部删除。 代码:mysql>deletefromempwhereename='dony';2.删除多表数据a.语法mysql>delete表1,......
  • Mysql时间常用函数
    查看当前系统的时间  select sysdate();  selectcurdate(),now(),DATE_FORMAT('2024-01-03','%Y-%m-%d') 2024-01-13|2024-01-1311:32:28|2024-01-03 目前常用的就curdate now  DATE_FORMAT('2024-01-03','%Y-%m-%d')  oracle的s......
  • 免费APP分发,支持应用合并、内测分发、扫码下载,下载量安装量统计,版本记录和应用在线封
    免费APP内测分发托管平台,支持应用合并、内测分发、扫码下载,下载量安装量统计,版本记录和应用在线封装打包app应用分发?应用分发也叫APP分发,其主要功能是方便APP的快速安装测试和推广那么分发App选择什么平台最好呢?这个主要是看App处于什么阶段。看看是处于应用测试阶段还是处于测......
  • oracle和mysql语句的异同
    Oracle和MySQL是两个流行的关系型数据库管理系统,它们都有SQL(结构化查询语言)作为主要的查询语言。尽管它们共享许多基本的SQL功能,但它们之间也存在一些关键的差异。以下是一些Oracle和MySQL语句的异同点:数据类型:相同点:两者都有整数、浮点数、字符、日期等数据类型。不同点:Oracle有一......
  • MySQL一键安装Shell脚本的实现
    本文主要介绍了MySQL一键安装Shell脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧−目录一、脚本说明1、linux系统版本2、MySQL版本3、运行方式二、脚本内容一、脚本说明1、linux系统版本EL6,EL7,EL8,......
  • 【Leetcode1949. 坚定的友谊】使用MySQL在无向图中寻找{"CompleteTripartite", {1, 1,
    目录题目地址思路代码MySQL代码等效Cypher查询(未验证)题目地址https://leetcode.cn/problems/strong-friendship/思路就是在无向图中寻找这个pattern:(*Mathematica*)GraphData[{"CompleteTripartite",{1,1,3}}]SQL写还是比较麻烦。更加复杂的查询还是建议把数据迁......
  • 【LeetCode 2142. 每辆车的乘客人数 I】乘客到站等车,车到站载客。MySQL用户变量编程完
    题目地址https://leetcode.cn/problems/the-number-of-passengers-in-each-bus-i/description/思路将所有关键时刻作为tick。(同一时刻车和人同时到,默认人在车前到)之后按照tick升序,使用MySQL用户变量编程完成计算逻辑。输出结果。代码withticksas(selectarrival_tim......