我在数据库表中有一组相当大的电话号码(大约200万).这些数字已插入块中,因此有许多连续的数字范围,范围内从10到10万.其中一些号码正在使用中,因此标记为不可用,其余号码可用.给定一个特定的数字,我需要一种方法来找到连续的数字范围,包括这个数字的上方和下方.范围应该继续,直到找到不可用的数字,或遇到两个范围的边界.
例如,给出以下集合:
1000 1001 1002 1010 1011 1012 1013 1020 1021 1022
使用1012作为参数进行搜索应该返回1010,1011,1012,1013.
解决方法
从理论上讲,集合中的项目没有特定的值,所以我假设你还有一些连续的ID列来定义数字的顺序.像这样的东西:
ID Number 1 1000 2 1001 3 1002 4 1010 5 1011 6 1012 7 1013 8 1020 9 1021 10 1022
您可以创建一个包含Number – ID结果的额外列:
ID Number Diff 1 1000 999 2 1001 999 3 1002 999 4 1010 1006 5 1011 1006 6 1012 1006 7 1013 1006 8 1020 1012 9 1021 1012 10 1022 1012
在Diff列中,相同范围内的数字将具有相同的结果.