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);
- Giả sử
dayhour
thuộc loại dữ liệu dấu thời gian (thiếu thông tin). Truyền đến ngày sẽ vô hiệu hóa các chỉ mục cơ bản. Đó là lý do tại sao tôi đã chuyển đổi nó thành sargable
Thuộc tính. Thông tin chi tiết:
- Tại sao lại truyền
value::int
?
- Trước tiên hãy tổng hợp, sau đó kết hợp với thiết bị. Rẻ hơn.