Je kunt het op een eenvoudigere manier oplossen:
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;
Je kunt het vinden in fiddle https://www.db-fiddle.com/f /eJsPZijRnQFGXugLGHnn93/0
OPMERKING:ik ben ervan uitgegaan dat null-waarden die worden weergegeven als '-' gewoon uitvoerformattering zijn. Als dat niet het geval is, kan uitvoer met NULL worden geconverteerd naar '-'.
OPMERKING2:ik weet niet hoe ik moet converteren naar Laravel/PHP-code, hopelijk heb je een beter idee.