需求1:给定时间范围,查询每小时的平均值
方案:
orm
select = {"hour": "concat(date_format(create_time, '%%Y-%%m-%%d %%H'),'-',hour(create_time)+1)"}objs = IndoorTemp.objects.filter(create_time__gte=start_date, create_time__lte=end_date,location_code=room).extra(select=select).values('location_code', 'hour').annotate(indoor_temp=Round(Avg('indoor_temp'), 2),outdoor_temp=Round(Avg('outdoor_temp'), 2),humidity=Round(Avg('humidity'), 2),pm1=Round(Avg('pm1'), 2),pm25=Round(Avg('pm25'), 2),co2=Round(Avg('co2'), 2),tvoc=Round(Avg('tvoc'), 2),).order_by('hour')
结果:
小结:相当于sql语句中的,为数据库字段,取出小时格式化时间作为分组条件,并设置别名为hour,为聚合函数,round保留2位小数 。
【mysql 按小时查询】需求2:给定时间范围,查询整点或接近整点的一条数据 。
方案:
原生sql:
文章插图
select a.* from indoor_temp a,( select min(id)as id,hour(create_time) AS timeFROM indoor_temp where location_code=%s and create_time >= %s and create_time <= %sGROUP BY time) b where b.id=a.id
结果:
小结:使用hour函数算出小时,同时取最小id联合作为分组函数,注意只能查询24小时数据,查询更多时间范围使用 。
需求3:查询每个设备最新一条数据 。
原生sql:
select a.* from indoor_temp a,( select equip_code,max(create_time) timefrom indoor_temp GROUP BY equip_code ORDER BY equip_code) b where a.equip_code=b.equip_code and a.create_time=b.time ORDER BY location_code
结果:
文章插图
需求4:查询每小时耗电量
背景:每分钟存一次累计电量
方案:
原生sql:
select 1 as id, max(equip_data) as ma,min(equip_data) as mi,round(max(equip_data)-min(equip_data),2)as t, DATE_FORMAT(create_time,%s)as timeFROM equip_datawhere type="electricity" and equip_code="elect_a" and create_time >= %s and create_time <= %sGROUP BY tim
结果:
小结:
注意在要加入1 as id ,不然会报错:Raw query mustthekey 。
同理可查询每天,每月,每年用量,只需改下格式即可
- MySQL python把网易财经的股票信息 财务报表入库
- mysql 表组是什么_数据库中属性组究竟是什么含义?
- 下奶按摩手法看图催奶,催乳师利用手法按摩催乳有用吗
- myeclipse mysql连接_怎么连接myeclipse与mysql数据库
- 3种简单又好看的·按钮效果
- 24小时咋不显示红包退还
- 数据库版 Java+MySQL学生选课与成绩管理系统
- 三个部位长白发最危险,白发长在哪里最危险
- 万能勾芡汁,万能五笔打特殊符号的按键
- 如何按签收时间筛选快递单号并导出