当涉及到SQL查询时,我是一个新手,所以我非常感谢在这方面的帮助。我需要获取连续三天或三天以上降雨量超过20厘米的城市的记录。应打印连续出现的全天记录。
CITY | 降雨量(cm( | 降雨日期|
---|---|---|
班加罗尔 | 21 | 2021年3月11日|
海得拉巴 | 25 | 2021年3月11日 |
德里 | 14 | 2021年3月11日 |
班加罗尔 | 24 | 2021年4月11日 |
海得拉巴 | 25 | 2021年4月11日|
金奈 | 21 | 04-11-2021//tr>|
班加罗尔 | 21 | 2021年5月11日|
金奈 | 22 | 2021年5月11日|
海得拉巴 | 14 | 05-11-2021//tr>|
班加罗尔 | 22 | 2021年6月11日 |
金奈 | 26 | 06-11-2021//tr>
以下是您的答案:
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;小提琴这里