近期為某個專案寫儲存過程做統計。其中有個是這樣的:
求每個月至少連續3個小時低於某個溫度值的時間(小時)。
假設有個全年溫度表:
[sql]view plain
copy
create
table
#t(m
int, h
int,t
decimal
(18,4));
--m:月份 h:小時 t:溫度值
--一年有8760小時,因此氣候表裡面有8760條記錄,對應全年每小時的溫度值
思路是這樣的:
1、先將低於指定溫度的記錄都找出來
2、然後在這些記錄中找出符合條件的,即那些屬於至少連續3小時低於指定溫度的記錄
至少連續3小時低於指定溫度的記錄有如下特徵:
比如說,有記錄 h= 3、4、5、6、7,它們顯然滿足條件。
mht1314
1412
1510
1612
1714
1912
11011
11313
11514
對於 h=3,存在著 h+1,h+2 都低於指定溫度
對於 h=4、5、6,存在著 h-1,h+1 都低於指定溫度
對於 h=7,存在著 h-1,h-2 都低於指定溫度
只要滿足這三項條件的任意一項,即可認為該時刻符合條件。因此可得sql語句:
[sql]view plain
copy
with
w as
( select
[m],[h],[t]
from
#t
where
[t]
) select
m ,free
= count
(*)
from
w where
(exists(
select
1 from
w as
w1 where
m=w.m
andh=w.h+1)
andexists(
select
1 from
w as
w1 where
m=w.m
andh=w.h+2))
or(exists(
select
1 from
w as
w1 where
m=w.m
andh=w.h-1)
andexists(
select
1 from
w as
w1 where
m=w.m
andh=w.h+1))
or(exists(
select
1 from
w as
w1 where
m=w.m
andh=w.h-1)
andexists(
select
1 from
w as
w1 where
m=w.m
andh=w.h-2))
group
bym;
sql語句ding 求一條sql語句
我理解你的問題是每乙個使用者id在乙個部門中所有的許可權,你給的資料好像不詳細,我新增了一些資料,你看看滿足需求不。sql with authority as 2 select 3029 kuid,205 krid,21 kdid from dual union all 3 select 3029 ...
一條SQL語句研究
現有 select from t where a in 5,3,2,1,8,9,30.假設 a 是主鍵,in裡面的引數是唯一的。現要求輸出的結果集按照 in 提供的引數順序排序。而不是按照a本身的排序規則排序?另 如果不要求使用臨時表或表變數,那麼又有什麼辦法實現。臨時表方案參卡 create ta...
一條sql 語句的優化
第二個版本 一條sql搞定,使用巢狀查詢,費時2 3分鐘 select a.indexid,c.title,c.createdtime,c.intro,d.picurl,e.src,e.size,e.info from mms content index a,mms index node b,mms...