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()函数取整。


版权声明:本文为wangxujin666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。