INSERT INTO miner_status_daily_rollups ( miner_id, bucket_date, sample_count, avg_mhs_av, max_mhs_av, avg_power_w, max_chip_temp_c, avg_chip_temp_c, avg_pool_rejected_percent, updated_at ) SELECT miner_id, observed_at::date AS bucket_date, COUNT(*) AS sample_count, AVG(mhs_av)::double precision, MAX(mhs_av)::double precision, AVG(power_w)::double precision, MAX(chip_temp_max_c)::double precision, AVG(chip_temp_avg_c)::double precision, AVG(pool_rejected_percent)::double precision, now() FROM miner_status_snapshots GROUP BY miner_id, observed_at::date ON CONFLICT (miner_id, bucket_date) DO UPDATE SET sample_count = EXCLUDED.sample_count, avg_mhs_av = EXCLUDED.avg_mhs_av, max_mhs_av = EXCLUDED.max_mhs_av, avg_power_w = EXCLUDED.avg_power_w, max_chip_temp_c = EXCLUDED.max_chip_temp_c, avg_chip_temp_c = EXCLUDED.avg_chip_temp_c, avg_pool_rejected_percent = EXCLUDED.avg_pool_rejected_percent, updated_at = now();