Xiao_Dong_Gua_Ya 2022-03-31 16:03 采纳率: 81.8%
浏览 394
已结题

SQL:2个人一起去看电影,准备预定电影票横向坐在一起,从1-15编号中从这么多排座位中,找出连续2个空位的全部组合,结果输出座位组合情况例(1、2 4、5)

2个人一起去看电影,准备预定电影票横向坐在一起,从1-15编号中从这么多排座位中,找出连续2个空位的全部组合,结果输出座位组合情况例(1、2
4、5)

img


还有个问题:如果有4个人,连续写出4个空位连续组合怎么写语句,如果有又N个人怎么查询

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-04-01 17:36
    关注

    先说下数据库类型及版本
    如果支持开窗函数,可以用lead或者lag来获取相邻行的数据,再来对数据进行判断即可


    下面是连续两个的

    with t(seat,status) as (
    select 1,'Y' FROM DUAL UNION ALL
    select 2,'Y' FROM DUAL UNION ALL
    select 3,'N' FROM DUAL UNION ALL
    select 4,'N' FROM DUAL UNION ALL
    select 5,'N' FROM DUAL UNION ALL
    select 6,'Y' FROM DUAL UNION ALL
    select 7,'N' FROM DUAL UNION ALL
    select 8,'N' FROM DUAL UNION ALL
    select 9,'N' FROM DUAL UNION ALL
    select 10,'N' FROM DUAL UNION ALL
    select 11,'N' FROM DUAL UNION ALL
    select 12,'Y' FROM DUAL UNION ALL
    select 13,'Y' FROM DUAL UNION ALL
    select 14,'N' FROM DUAL UNION ALL
    select 15,'N' FROM DUAL )
    
    select SEAT,L_SEAT from (
    select T.*,
    LAG(SEAT) OVER(ORDER BY SEAT) L_SEAT,
    LAG(STATUS) OVER(ORDER BY SEAT) L_STATUS from T)
    WHERE status='N' AND L_STATUS='N'
    

    img

    下面是4个及以上连续座位的

    select MIN(SEAT),MAX(SEAT) from (
    select tt.*,sum(l) over(order by seat) d from (
    select T.*,
    case when LAG(STATUS) OVER(ORDER BY SEAT) =status then 0 else 1 end l from T) tt
    ) where status='N'
    GROUP BY D HAVING COUNT(1)>=4
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 修改了问题 3月31日
  • 修改了问题 3月31日
  • 展开全部

悬赏问题

  • ¥15 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题