一条SQL语句求每月连续低温时间

网友投稿 332 2022-11-04


一条SQL语句求每月连续低温时间

近期为某个项目写存储过程做统计。其中有个是这样的:

求每个月至少连续3个小时低于某个温度值的时间(小时)。

假设有个全年温度表:

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,它们显然满足条件。

m h t1 3 141 4 121 5 101 6 121 7 141 9 121 10 111 13 131 15 14

对于 h=3,存在着 h+1,h+2 都低于指定温度

对于 h=4、5、6,存在着 h-1,h+1 都低于指定温度

对于 h=7,存在着 h-1,h-2 都低于指定温度

只要满足这三项条件的任意一项,即可认为该时刻符合条件。因此可得SQL语句:

WITH w AS( SELECT [m],[h],[t] FROM #t WHERE [t] < 15 )SELECT m ,Free = COUNT(*) FROM w WHERE (EXISTS(SELECT 1 FROM w as w1 where m=w.m and h=w.h+1) AND EXISTS(SELECT 1 FROM w as w1 where m=w.m and h=w.h+2)) OR (EXISTS(SELECT 1 FROM w as w1 where m=w.m and h=w.h-1) AND EXISTS(SELECT 1 FROM w as w1 where m=w.m and h=w.h+1)) OR (EXISTS(SELECT 1 FROM w as w1 where m=w.m and h=w.h-1) AND EXISTS(SELECT 1 FROM w as w1 where m=w.m and h=w.h-2)) GROUP BY m;


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:武汉公交查询API(武汉公交查询app下载)
下一篇:SQL SERVER的整型运算,让人大吃一惊
相关文章

 发表评论

暂时没有评论,来抢沙发吧~