mysql表中间那部分数据_如何取表中间某个范围的数据

昨天工作需要生成了200多W行的数据,其实就是递增生成的,前面的文章有写过。这次范围不是连续的,比如电话号码段,可能是12340000-12350000,另一个范围就是22340000-22349999。一共200多个段,很2B的做法,手动分开连续的和不连续,然后使用之前的语句生成号码。我不会告诉你,我就是用这2B的做法的;但我可以告诉你后面有更2B的。

一共放了70多个excel工作表。结果要放到三个工作表里。只好在数据库中union all起来,再copy到excel工作表里,但excel一个工作表又不能放下200多W行,最多大概是104W多,这就是前面为什么要放三个工作表里的原因。

那如何用SQL生成分三部分呢?select top,是的!top只是放第一个工作表,第二第三呢?

SourceTable就一个字段,字段1

第一个语句:select top 1000000 * from  SourceTable;

第二个语句:

select top 2000000 * from SourceTable

except

select top 1000000 * from SourceTable

这个语句正确吗?“堆数据表是没有聚集索引的表。即数据行不按任何特殊的顺序存储,数据页也没有任何特殊的顺序”。改为下面的:

select * from

(select top 2000000 * from SourceTable order by 1)

except

select * from

(select top 1000000 * from SourceTable order by 1)

第三个语句:

select * from

(select top 总行数 * from SourceTable  order by 1)

except

select * from

(select top 2000000 * from SourceTable order by 1)

是不是很2啊,期间我还试过更2的,分享出来

select * from (select * from SourceTable order by 1)

幸好这个语句有报错,再重看那语句,自己都笑了。

正是因为这里用到except,所以上一篇才写except的去不去重复的问题。

关于从某表中取中间某些行的话题先放下;在返回到生成电话号码那话题

生成号码都可以用循环,有多少号码段为毛不能用循环啊?

1.把号码段导入数据库,HD;添加序号

select ROW_NUMBER() over (order by 号段) as xuhao, 号段 into HDU from HD;

2.循环中嵌套循环就OK了

declare @n numeric(8,0);

declare @i int;

set @i=1;

while (@i<=5)

begin

set @n = (select cast(号段+'0000' as numeric) from hdU where xuhao=@i);

while (@n <= (select cast(号段+'9999' as numeric) from hdU where xuhao=@i))

begin

insert into Haoma select @n

set @n = @n+1

end

set @i=@i+1

end

go

试了5个号段是没问题的。

就加一个xuhao的字段就方便多了,干嘛不用identity?非得用ROW_NUMBER()?

思维啊,这些天老是想窗口函数了。其实identity也是可以的。

今天和老大说关于取表中间行的问题,老大直接来了句,你加个id的字段就好了。对啊,取前多少行和中间多少行,在where条件里判断ID的范围就好了。恍然大悟啊,上面的identity替换窗口函数也是受这个影响。

思维啊!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值