输入数据库里面的两个数据
一个是X
一个是区间Y[] 简单如(M,N)如果X在区间Y内 输出(M,N)
如果X在区间Y外 输入(M,N), X( X在区间(M,N)之前,X在(M,N)之后)(M,N)内数据有可能因为删改出现不存在情况 输入的X也存在不存在的情况
那种情况选取该不存在的记录的下一条如(2没有找3,3没有找4......)
区间一样(如:[3,N],3不存在则需要查找[4,N]这里可以将N看做一像TOP一样的数比如前100条数据等等)
一个是X
一个是区间Y[] 简单如(M,N)如果X在区间Y内 输出(M,N)
如果X在区间Y外 输入(M,N), X( X在区间(M,N)之前,X在(M,N)之后)(M,N)内数据有可能因为删改出现不存在情况 输入的X也存在不存在的情况
那种情况选取该不存在的记录的下一条如(2没有找3,3没有找4......)
区间一样(如:[3,N],3不存在则需要查找[4,N]这里可以将N看做一像TOP一样的数比如前100条数据等等)
输入一个数 1
再输入一个区间 1-100SQL得到的效果:1-100如果输入的是1再输入的区间是3-103SQL得到的结果是 1,3-103当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110
输入一个数 1
再输入一个区间 1-100 SQL得到的效果:1-100 如果输入的是1 再输入的区间是3-103 SQL得到的结果是 1,3-103 当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110 -----------------
这个简单,不过和SQL好像没有什么联系,,,
楼主是指 以取id从m到n(m<n)之间的记录.及 id=x的记录.
如果m到n之间存在x,那当然取到的就是 m到n
如果m到n之间不存在x:
若x 位于m-n外,即 x<m<n,则到 x union m-n
若x 位于m-n之外,即 m<n<x,则取 m-n union x是否我说的这个意思? 可能手误.declare @x int,@m int,@n int
select @x=1,@m=3,@n=103
select *,pri=case when @x between @m and @n then 0 else case when @x<@m then -1 else 1 end end from tb where id=@x
union
select *,pri=0 from tb where id between @m and @n
order by pri,id或者
select * from tb where id between @m and @n or id=@x order by case when id between @m and @n then 0 else case when id<@m then -1 else 1 end end ,id
设表tb有字段id, id为int,不连续.
楼主是指 以取id从m到n(m <n)之间的记录.及 id=x的记录.
如果m到n之间存在x,那当然取到的就是 m到n
如果m到n之间不存在x:
若x 位于m-n外,即 x <m <n,则到 x union m-n
若x 位于m-n之外,即 m <n <x,则取 m-n union x
-------------------------------------------------------
其实我现在想要的和你说的差不多
但有点比较麻烦的是
我不知道(m,n)中的`n`是多少,所以无法用来做判断条件
因为抽取的数据是从M像后的100行,而此后的100行最后第一百行我找不到
无法用判断(m是一个任意的输入值)新的输入值x在这个区间之外(能判断比之小x<m然后union,但对于x>(m向后数100位的那个数值)
这应该是我最想知道的重点~
当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110
-------------
????没有看懂~~~------------- -------------
一个并集合,3-103连续的情况下(3,4,5,...103,110)
输入一个数 1
再输入一个区间 1-100 SQL得到的效果:1-100 如果输入的是1 再输入的区间是3-103 SQL得到的结果是 1,3-103 当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110 -----------------
这个简单,不过和SQL好像没有什么联系,,,----------------- ----------------- -----------------
----------------- ----------------- -----------------
那是我举的例子 方便表述我想说的内容~~
呵呵
----------------- ----------------- -----------------
上面的是理想状态下的数据
也是连续的确特例 现在主要是要做的是如 输入3以后的100位(ID不连续)
然后判断一个数在不在上面的区间内 ----------------------
这个还是看不懂,,,----------------- ----------------- -----------------
----------------- ----------------- -----------------
数据库字段是不连续的
就好象简单的一员工表
员工号由于员工辞职以后将消失
然后就会空出来比如说4号员工辞职了
我们的员工表里面就只有(1,2,3,5...X)
就想描述这个意思
你的意思是说m和n是行号?----------------- ----------------- -----------------
----------------- ----------------- -----------------
可以理解成行号
但如果输入的m在数据库里没有的话那就要找下一个最接近M的值Y来替换M
然后找Y和Y以后100行内,输入的X是否超出这个区间,X是固定的,没有的话就不考虑X,有的话就要判断是并还是不并
那还是不对, 即然可以理解为行号
那么比如 m=2,n=102
当数据库中记录有超过102行时,那么这个行号就会存在
如果记录最多只101,那么102行就不存在,102都不存在,又何来下一个行号? 还是不明白. ----------------- ----------------- -----------------
----------------- ----------------- -----------------
可以理解成行号
当数据库中记录有超过102行时,那么这个行号就会存在
//正常情况
如果记录最多只101,那么102行就不存在,102都不存在,又何来下一个行号?
//取该记录到最末行
比如数据库只有100行
我要抽取5到达以后的100行 那肯定抽取的是(5-100)行数<100行
输入的X要超出了这个条件就不列如检索条件了
我没有能实现,觉得有点代表性,所以来看看大家的想法,有没有碰到类似的情况
项目已经改了方案了,就是两个条件只要一个,就用简单的TOP实现,可我很想知道
这个看起来好象简单的问题,我少考虑了什么东西!~`
然后order by 搞定
哪有那么复杂
http://blog.csdn.net/roy_88/archive/2007/02/13/1509413.aspx