Giờ () có vẻ như nó sẽ là một chức năng hữu ích cho việc này, vì bạn chỉ xem xét một ngày duy nhất. Có lẽ cái gì đó như thế này sẽ phù hợp với bạn:
SELECT * FROM
(SELECT HOUR(time) hour, avg(ph) AS avg_ph
FROM ph
WHERE time >= NOW() - INTERVAL 1 DAY
GROUP BY hour) p
JOIN
(SELECT HOUR(time) hour, avg(temperature) AS avg_temp
FROM temperature1
WHERE time >= NOW() - INTERVAL 1 DAY
GROUP BY hour) t ON t.hour = p.hour
JOIN
(SELECT HOUR(time) hour, avg(solids) AS avg_solids
FROM solids
WHERE time >= NOW() - INTERVAL 1 DAY
GROUP BY hour) s ON s.hour = p.hour;
Vì nó đang sử dụng các phép nối bên trong, tôi đang đưa ra giả định rằng sẽ luôn có ít nhất một bản ghi trong mỗi bảng trong một giờ, nhưng nó có vẻ là một giả định hợp lý.