栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用窗口函数优化SQL查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用窗口函数优化SQL查询

我将尝试将部分计算移至行插入阶段。

添加新列:

alter table measurements add consumption real;

更新列:

with m1 as (    select        id, power_total, created_at,        lag(power_total) over (partition by device_id order by created_at) prev_power_total,        lag(created_at) over (partition by device_id order by created_at) prev_created_at    from measurements    )update measurements m2set consumption =     (m1.power_total+ m1.prev_power_total)*    extract(epoch from m1.created_at- m1.prev_created_at)from m1where m2.id = m1.id;

创建触发器:

create or replace function before_insert_on_measurements()returns trigger language plpgsqlas $$declare    rec record;begin    select power_total, created_at into rec    from measurements    where device_id = new.device_id    order by created_at desc    limit 1;    new.consumption:=         (new.power_total+ rec.power_total)*        extract(epoch from new.created_at- rec.created_at);    return new;end $$;create trigger before_insert_on_measurementsbefore insert on measurementsfor each row execute procedure before_insert_on_measurements();

查询:

select device_id, sum(consumption) total_consumptionfrom measurements-- where conditionsgroup by 1order by 1


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号