SQL查询,用于打印一个城市连续3天的降雨记录



当涉及到SQL查询时,我是一个新手,所以我非常感谢在这方面的帮助。我需要获取连续三天或三天以上降雨量超过20厘米的城市的记录。应打印连续出现的全天记录。

降雨日期2021年3月11日2021年4月11日04-11-2021//tr>2021年5月11日2021年5月11日05-11-2021//tr>06-11-2021//tr>
CITY 降雨量(cm(
班加罗尔 21
海得拉巴 25 2021年3月11日
德里 14 2021年3月11日
班加罗尔 24 2021年4月11日
海得拉巴 25
金奈 21
班加罗尔 21
金奈 22
海得拉巴 14
班加罗尔 22 2021年6月11日
金奈 26

以下是您的答案:

SELECT CC.* FROM CityRainfall CC
JOIN (SELECT C.City,MAX(C.DATEOFRAINFALL) AS MAXDATE,MIN(CR.DATEOFRAINFALL) 
AS MINDATE FROM CityRainfall C
JOIN CityRainfall CR ON DATEDIFF(DAY,CR.DateOfRainfall,C.DateOfRainfall)=2 
AND CR.CITY=C.CITY
WHERE C.Rainfall> 20
GROUP BY C.CITY) C ON C.City = CC.City AND CC.DateOfRainfall >= MINDATE AND 
CC.DateOfRainfall <=MAXDATE
ORDER BY C.CITY

让我再解释一下。内部查询是一个自联接查询,用于查找降雨量超过20厘米的城市。请注意,自加入仅适用于连续2天的记录。"最大"one_answers"最小"日期是从内部查询表中提取的,用于再次与表联接以获得结果集。

这个答案还假设一个城市自第一次被添加到表中以来每天都有一个记录。

如果你理解答案有困难,请告诉我。我可以解释更多。

如果允许窗口函数。

计算连续超过20厘米的每个城市的排名。

然后按城市计数&排名他们有多少。

然后根据该计数进行筛选。

select city_name, rainfall_cm, rainfall_date
from
(
select *
, count(*) over (partition by city_name, rnk) as cnt
from 
(
select * 
--, floor(rainfall_cm/20) as trunc_cm
, row_number() over (partition by city_name order by rainfall_date desc)
+ row_number() over (partition by city_name order by floor(rainfall_cm/20), rainfall_date) as rnk
from tbl_city_rainfall t
) q1
) q2
where cnt >= 3
order by city_name, rainfall_date
city_name|rainall_cm|rainall_date:---------|---------:|:------------班加罗尔|21|2021-11-03班加罗尔|24|2021-11-04班加罗尔|21|2021-11-05班加罗尔|22|2021-11-06金奈|21|2021-11-04金奈|22|2021-11-05金奈|26|2021-11-06

db<gt;小提琴这里

最新更新