表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表的一列 也只有一列 的自連線...