sql - 找到三个连续可用的座位号
问题描述
预订
ROW_NUM SEAT_NUMBER STATUS
R1 S1 Reserved
R1 S2 Reserved
R1 S3 Free
R1 S4 Free
R1 S5 Free
R2 S1 Reserved
R2 S2 Reserved
R2 S3 Free
R2 S4 Free
R2 S5 Free
R3 S1 Free
R3 S2 Reserved
R3 S3 Free
R3 S4 Reserved
R3 S5 Reserved
所需输出:
ROW_NUM SEAT_NUMBER
R1 S3
R1 S4
R1 S5
R2 S3
R2 S4
R2 S5
解决方案
您可以使用row_number()
. 以下标识了相邻的免费座位组:
select t.*, (seqnum - seqnum_s) as grp
from (select t.*,
row_number() over (partition by row_num order by seat_number) as seqnum,
row_number() over (partition by row_num, status order by seat_number) as seqnum_s
from t
) t
where status = 'Free';
您可以使用更多窗口函数添加数字:
select t.*
from (select t.*,
count(*) over (partition by row_num, seqnum - seqnum_s, status) as cnt
from (select t.*,
row_number() over (partition by row_num order by seat_number) as seqnum,
row_number() over (partition by row_num, status order by seat_number) as seqnum_s
from t
) t
where status = 'Free'
) t
where cnt >= 3;
推荐阅读
- python - WEB SCRAPING - python 请求会话无法收集数据
- python - Python winreg - 如何将换行写入 REG_SZ 值
- python - 如何将列表分成其组成部分并用它们创建变量
- javascript - 任何人都可以帮我解决Dimensions,RN吗?
- c++ - 为什么 GCC 聚合初始化数组首先用零填充整个事物,包括非零元素?
- ms-access - 如何按日期连接两个表?
- python-3.x - 如何在 Wx.Stc.StyledTextCtrl 中不允许撤消 (Ctrl+Z)
- javascript - ajax成功调用后,php发送到ajax的数据未定义
- forms - Typo3 9.5 使用 get 参数预填充表单字段
- python - 在 Pandas 中获取特定年份创建的许多项目