tmp query: SELECT meaning.location_id, meaning.first_log_id, IFNULL(next_meaning.first_log_id, 2147483647) next_log_id FROM `meaning` LEFT JOIN meaning AS next_meaning ON next_meaning.prev_meaning_id = meaning.meaning_id WHERE meaning.location_id IS NOT NULL SELECT log_timestamp, location_name, log_temperature, log_humidity FROM log JOIN meanings ON meanings.sensor_id = log.sensor_id AND log.log_id >= first_log_id AND log.log_id < next_log_id JOIN locations USING (location_id)