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);
- मान लें
dayhour
डेटा प्रकार टाइमस्टैम्प का है (सूचना अनुपलब्ध है)। कास्ट टू डेट मूल अनुक्रमणिका को अक्षम कर देगा। इसलिए मैंने इसे एक sargable
में बदल दिया। विधेय अधिक विवरण:
- कास्ट क्यों करें
value::int
?
- पहले एग्रीगेट करें, फिर डिवाइस से जुड़ें। सस्ता।