запрос правильно всё выводит, но нужно чтоб ВСЕ данные с timeline были в ОДНОЙ строке.
Так все-таки правильно или нет? Не совсем ясно, что вы хотите получить на выходе.
Чтобы на каждый order было не больше одного timeline? Или чтобы на каждый order выводились данные по всем timeline, но в каком-то агрегированном виде? Если так, то вопрос в каком виде.
Так или иначе, когда после джойна нужно отбросить дубликаты и оставить только одну результирующую строку на каждую исходную строку, отлично подходит конструкция:
Dedup = ROW_NUMBER() OVER (PARTITION BY o.id ORDER BY ...).
Следующим шагом - подзапросом или через CTE - устанавливается фильтр на Dedup = 1