create or replace function total_energy_by_day_and_device(p_day date, p_device varchar) returns double precision language plpgsql as $$ declare v_firstEnergy double precision; v_lastEnergy double precision; v_total double precision; begin select energy into v_lastEnergy from power_measurement_t where time = ( select max(time) from power_measurement_t where time between p_day + time '00:00' and p_day + time '00:00' + interval '24h' and deviceid = p_device and status = 'Ok' ) and deviceid = p_device; select energy into v_firstEnergy from power_measurement_t where time = ( select min(time) from power_measurement_t where time between p_day + time '00:00' and p_day + time '00:00' + interval '24h' and deviceid = p_device and status = 'Ok' ) and deviceid = p_device; v_total := v_lastEnergy - v_firstEnergy; return v_total; end; $$;