Bạn có thể giải quyết nó theo cách dễ dàng hơn:
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;
Bạn có thể tìm thấy nó trong fiddle https://www.db-fiddle.com/f / eJsPZijRnQFGXugLGHnn93 / 0
LƯU Ý:Tôi đã giả định rằng các giá trị null được hiển thị dưới dạng '-' chỉ là định dạng đầu ra. Nếu đó không phải là trường hợp đầu ra với NULL có thể được chuyển đổi thành '-'.
LƯU Ý 2:Tôi không biết cách chuyển đổi sang mã Laravel / PHP, hy vọng bạn sẽ có ý kiến tốt hơn.