Можете да го разрешите по по-лесен начин:
select ts recordtime, max(to1) tempout, max(to2) tempoutstamb, max(to3) tempoutstamb2
from (
select ts, tempout to1, cast (null as numeric(10,1)) to2, cast (null as numeric(10,1)) to3
from table1
union all
select ts, null, tempout, null
from table2
union all
select ts, null, null, tempout
from table3
) tt
group by ts
order by ts;
Можете да го намерите във fiddle https://www.db-fiddle.com/f /eJsPZijRnQFGXugLGHnn93/0
ЗАБЕЛЕЖКА:Приех, че нулевите стойности, показани като '-', са просто изходно форматиране. Ако това не е така, изходът с NULL може да бъде преобразуван в '-'.
ЗАБЕЛЕЖКА 2:Не знам как да конвертирам в Laravel/PHP код, надявам се, че имате по-добра идея.