MySQL按時間週期聚合數據(任意天數)

查詢需求:


      查詢僅位於A區域以外地區的溫度傳感器自2010年來的採樣值的數量count(*)、平均溫度avg(degree)、最高溫度max(degree)和最低溫度min(degree),將採集結果按照10天爲週期進行聚合,並將結果按所處地域(location)和傳感器類型(type)再次進行聚合。

SELECT staLocation,staType,ROUND(DATEDIFF(acquisition_time,'2010-01-01 00:00:00.000') / 10)  as days ,COUNT(*), AVG(water_level), MAX(water_level), MIN(water_level) FROM RiverStation where staLocation<>'A' AND acquisition_time > '2010-01-01 00:00:00.000' GROUP BY staLocation,staType,days

關鍵點:

round()函數:用於取整;mysql的“/”運算和java等高級編程語言不同,會做除運算,所以有小數點,這個函數用於保留整數;

DATADIFF()函數:顧名思義,就是做日期加減,返回的結果是兩個日期之間差距的天數。

使用DATADIFF()函數可以保證每個日期差值的唯一性,再根據10天爲一組的條件,使用/10來進行分組,最後使用round()函數取整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章