1. 程式人生 > 其它 >oracle 統計表資料某一欄位連續超出某範圍值算作一次狀態的問題

oracle 統計表資料某一欄位連續超出某範圍值算作一次狀態的問題

技術標籤:技術資料庫sqloracle

@風吹四季

問題描述

假設現有這樣一種需求,針對某一地區的每月最高氣溫狀況,如果連續出現超過3日(包含3日)最高氣溫35攝氏度,則標記為一次高溫過程,請統計某一個月的高溫過程次數。
使用java程式碼實現邏輯可以,但現提供一種直接使用sql實現的方式,
(理解點:連續4日,5日,…也只算作一次)

測試表資料如下(單位是0.1攝氏度)

測試資料
從測試資料可以看出,一共有9天高於35攝氏度,但只能算作兩次,

sql實現

with  x  as 
(
select R,rownum rown FRom (
select R ,
(select case when RZGQW > 350 then 1 else 0 end from tem b  WHERE b.Y = a.Y and b.R =a.R+1) after,
(select case when RZGQW  > 350 then 1 else 0 end  from tem b where  b.Y = a.Y and b.R =a.R-1)  before
   from  tem a  where RZGQW >350) 
   where after=1 and before =1 order by R) 


select sum(cishu)  from (
select case when 
(select v.R from   x v where v.rown= u.rown+1 )- u.r=1 then 0 else 1 end
    cishu 
from   x u where u.rown>1
 );

實現邏輯

要先查詢出高於35攝氏度的資料,並且查詢出前一日和後一日都高於35攝氏度的中間日期,本示例可以看到 查詢出來2,3,10三天,通過日期排序,並查詢出偽序列號(為後續查詢使用),作為一次高溫過程意味著有排序的列表的下一日期和上一日期是相鄰的,日期相減為1,則為一次高溫過程,不能算新的一次高溫過程,仔細理解,歡迎交流。