判斷連號範圍查詢例子

2021-05-04 05:33:14 字數 2170 閱讀 6804

表tb有兩個長整型欄位f1,f2

f1    f2

---------------------------

100  109

110  119

120  129

140  149

150  159

160  169

問題:

100 至 129 是連續的,140 至 169是連續的,如何得到

f1    f2

---------------------------

100  129

140  169

--> 生成測試資料表:tb

ifnot

object_id('

[tb]')

isnull

drop

table[tb

]gocreate

table[tb

]([f1

]int,[

f2]int)

insert[tb

]select

100,

109union

allselect

110,

119union

allselect

120,

129union

allselect

140,

149union

allselect

150,

159union

allselect

160,

169go

--select * from [tb]

-->sql2005查詢如下:

select

a.f1,b.f2

from

(selectrn=

row_number()

over

(order

byf1),f1

from

tb t

where

notexists

(select

1from

tb where

abs(f2

-t.f1)=1

)) a

join

(selectrn=

row_number()

over

(order

byf2),f2

from

tb t

where

notexists

(select

1from

tb where

abs(t.f2

-f1)=1

)) b

ona.rn

=b.rn

/*f1          f2

----------- -----------

100         129

140         169

(2 行受影響)*/

-->sql2000查詢如下:

select

a.f1,

min(b.f2) f2

from

(select

f1 from

tb t

where

notexists

(select

1from

tb where

abs(f2

-t.f1)=1

)) a

join

(select

f2 from

tb t

where

notexists

(select

1from

tb where

abs(t.f2

-f1)=1

)) b

ona.f1

<=

b.f2

group

bya.f1

/*f1          f2

----------- -----------

100         129

140         169

(2 行受影響)

判斷時間範圍

sql中判斷時間範圍可以用datediff方法,示例 public static dataset getresult string strrolesort,string struserid,string strfirsttime,string strlasttime,string strrolest...

判斷攻擊範圍

1 只攻擊正前方的單位,向前發射一條射線,攻擊碰到的單位 raycasthit hit range 射線的長度,即攻擊範圍,masktarget敵方單位的mask,只攻擊敵方單位 if physics.raycast unit.thist.position,unit.thist.forward,ou...

mysql 範圍查詢 Mysql 範圍查詢優化

1.2 另外,對於btree索引,index和乙個常量值通過 between,或者 操作符做比較 1.3 對於所有型別的index,多範圍條件通過 or and關鍵字組合形式 常量值 在之前的描述中意味著 2.1 查詢字串的常量形式 2.2 const 或者system表的一列 也只有一列 的自連線...