CREATE OR REPLACE FUNCTION device_daily_statistics (v_device_id int4, v_poll_date date)
RETURNS text AS
$$
DECLARE
f accounts_devices_polldata%rowtype;
l accounts_devices_polldata%rowtype;
v_traffic_in int4;
v_traffic_out int4;
v_avg_ds_pwr int4;
v_avg_ds_snr int4;
v_avg_tx_pwr int4;
BEGIN
SELECT * INTO f FROM accounts_devices_polldata
WHERE device_id = v_device_id AND cmts_status = 6 AND cast(poll_time as date) = v_poll_date
AND poll_time = (select min(poll_time) from accounts_devices_polldata where device_id = v_device_id AND cast(poll_time as date) = v_poll_date);
SELECT * INTO l FROM accounts_devices_polldata
WHERE device_id = v_device_id AND cmts_status = 6
AND cast(poll_time as date) = v_poll_date
AND poll_time = (select max(poll_time) from accounts_devices_polldata where device_id = v_device_id AND cast(poll_time as date) = v_poll_date);
v_traffic_in := (l.traffic_in - f.traffic_in);
v_traffic_out := (l.traffic_out - f.traffic_out);
v_avg_ds_pwr := (select cast(avg(ds_power) as int4) from accounts_devices_polldata where device_id = v_device_id AND cmts_status = 6 AND cast(poll_time as date) = v_poll_date group by device_id);
v_avg_ds_snr := (select cast(avg(ds_snr) as int4) from accounts_devices_polldata where device_id = v_device_id AND cmts_status = 6 AND cast(poll_time as date) = v_poll_date group by device_id);
v_avg_tx_pwr := (select cast(avg(tx_power) as int4) from accounts_devices_polldata where device_id = v_device_id AND cmts_status = 6 AND cast(poll_time as date) = v_poll_date group by device_id);
return 'Traffic IN: ' || cast(v_traffic_in as text) || ' Traffic OUT: ' || cast(v_traffic_out as text) || ' DS Power: ' || cast(v_avg_ds_pwr as text) || ' DS SNR: ' || cast(v_avg_ds_snr as text) || ' TX Power: ' || cast(v_avg_tx_pwr as text);
END
$$
LANGUAGE 'plpgsql';