mysql - 如何在 SQL 表列中获取 N 个间隙?
问题描述
我有一个名为 student data 的表,它有两列SINFO和SID。SINFO的范围从G74001到G99999。下面是表格的格式。
编写一个 SQL 查询以获取来自“ SINFO ”的间隙的前 n 个(在本例中假设为 3)。
在这种情况下,前 3 个间隙是 G74003、G74004、G74006。如何通过 SQL 查询来实现这一点。SID是一个唯一值。
解决方案
创建一个包含所有数字的临时表然后左连接基表并选择所有空值或顶部值,例如
Create Table #Tmp
([SINFO] [nvarchar](50) NULL)
declare @ddd int =74000
WHILE @ddd < 74015
BEGIN
select @ddd= @ddd +1
insert into #Tmp (SINFO) values ( 'G' + Convert(Nvarchar , @ddd ))
END;
--all gaps
select #Tmp.SINFO , Table_2.SINFO from #Tmp
left join Table_2 on #Tmp.SINFO = Table_2.SINFO
where Table_2.SINFO is null
order by #Tmp.SINFO
--Frist gaps
select top(1) #Tmp.SINFO , Table_2.SINFO from #Tmp
left join Table_2 on #Tmp.SINFO = Table_2.SINFO
where Table_2.SINFO is null
order by #Tmp.SINFO
If(OBJECT_ID('tempdb..#Tmp') Is Not Null)
Begin
Drop Table #Tmp
End
推荐阅读
- ios - 导航控制器和它的子节点都没有被取消初始化
- node.js - 当用户与我的应用程序机器人用户打开直接消息窗口时收到通知
- r - 如何在ggplot2中的单个方面注释文本
- c++ - 跳跃游戏中嵌套for循环的问题
- ruby-on-rails - 表单中 f.select 上的“未定义”占位符
- windows - 从命令行更改 Xamarin.Android SDK 位置
- django - Django 项目文件 - 无法发现错误:“无效的块标签:'static'
- coq - 逻辑:In_app_iff 锻炼
- python - 在同一图表上为不同状态绘制不同的线
- node.js - 关系的列“0”上的续集批量更新错误不存在