SELECT b.name, a.*, a.sum2 - a.sum3 AS diff
FROM (
SELECT id
, sum(CASE WHEN value_type = 2 THEN value::int END) AS sum2
, sum(CASE WHEN value_type = 3 THEN value::int END) AS sum3
FROM data
WHERE id = 1
AND value_type IN (2, 3)
AND dayhour >= '2015-12-12 0:0'::timestamp
AND dayhour < '2015-12-13 0:0'::timestamp
GROUP BY 1
) a
JOIN device b USING (id);
- Suponiendo
dayhour
es del tipo de datos marca de tiempo (falta información). La conversión hasta la fecha deshabilitaría los índices básicos. Por eso lo transformé en un sargable
predicado. Más detalles:
- Por qué el cast
value::int
?
- Agregue primero, luego únase al dispositivo. Más barato.