一條SQL語句求每月連續低溫時間

2021-06-22 09:26:14 字數 1665 閱讀 4255

近期為某個專案寫儲存過程做統計。其中有個是這樣的:

求每個月至少連續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...