Data selection using timestamp from previous table

I have a measurement series (generation for multiple solar inverters) and I want so select from a different data series at the time when the solar generation completed (yesterday) and started (today) - how much electricty was used overnight.

Very long query, only a last few rows matter:

import "experimental"

// Get yesterdays solar data 
garagedataYesterday = from(bucket: "nodered")
  |> range(start: experimental.subDuration(d: 24h, from: today()), stop: today())
  |> filter(fn: (r) => r["_measurement"] == "solar")
  |> filter(fn: (r) => r["inverter"] == "garage")
  |> filter(fn: (r) => r["_field"] == "outputpower")
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)

smalldataYesterday = from(bucket: "nodered")
  |> range(start: experimental.subDuration(d: 24h, from: today()), stop: today())
  |> filter(fn: (r) => r["_measurement"] == "solar")
  |> filter(fn: (r) => r["inverter"] == "small")
  |> filter(fn: (r) => r["_field"] == "outputpower")
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)

olddataYesterday = from(bucket: "nodered")
  |> range(start: experimental.subDuration(d: 24h, from: today()), stop: today())
  |> filter(fn: (r) => r["_measurement"] == "solar")
  |> filter(fn: (r) => r["inverter"] == "old")
  |> filter(fn: (r) => r["_field"] == "outputpower")
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)

yesterdaySolar = union(tables: [garagedataYesterday,smalldataYesterday,olddataYesterday])
  |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> group(columns: ["_time", "_measurement"])
  |> pivot(rowKey:["_time"], columnKey: ["inverter"], valueColumn: "outputpower")
  |> group()
  |> map(fn: (r) => ({r with garage: if exists r.garage then r.garage else 0.0})) 
  |> map(fn: (r) => ({r with small: if exists r.small then r.small else 0.0}))  
  |> map(fn: (r) => ({r with old: if exists r.old then r.old else 0.0}))   
  |> map(fn: (r) => ({r with _value: r.garage+r.old+r.small}))
  |> drop(columns: ["garage","old","small"])
  |> last()

garagedataToday = from(bucket: "nodered")
  |> range(start: today(), stop: experimental.addDuration( d: 24h, to: today()))
  |> filter(fn: (r) => r["_measurement"] == "solar")
  |> filter(fn: (r) => r["inverter"] == "garage")
  |> filter(fn: (r) => r["_field"] == "outputpower")
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)

smalldataToday = from(bucket: "nodered")
  |> range(start: today(), stop: experimental.addDuration( d: 24h, to: today()))
  |> filter(fn: (r) => r["_measurement"] == "solar")
  |> filter(fn: (r) => r["inverter"] == "small")
  |> filter(fn: (r) => r["_field"] == "outputpower")
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)

olddataToday = from(bucket: "nodered")
  |> range(start: today(), stop: experimental.addDuration( d: 24h, to: today()))
  |> filter(fn: (r) => r["_measurement"] == "solar")
  |> filter(fn: (r) => r["inverter"] == "old")
  |> filter(fn: (r) => r["_field"] == "outputpower")
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)

todaySolar = union(tables: [garagedataToday,smalldataToday,olddataToday])
  |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> group(columns: ["_time", "_measurement"])
  |> pivot(rowKey:["_time"], columnKey: ["inverter"], valueColumn: "outputpower")
  |> group()
  |> map(fn: (r) => ({r with garage: if exists r.garage then r.garage else 0.0})) 
  |> map(fn: (r) => ({r with small: if exists r.small then r.small else 0.0}))  
  |> map(fn: (r) => ({r with old: if exists r.old then r.old else 0.0}))   
  |> map(fn: (r) => ({r with _value: r.garage+r.old+r.small}))
  |> drop(columns: ["garage","old","small"])
  |> first()

timestamps = union(tables: [ yesterdaySolar, todaySolar])
  |> findColumn(fn: (key) => true, column: "_time")

from(bucket: "nodered")
  |> range(start: timestamps[0], stop: timestamps[1])
  |> filter(fn: (r) => r["_measurement"] == "sensors")
  |> filter(fn: (r) => r["device"] == "house_phase0" or r["device"] == "house_phase1" or r["device"] == "house_phase2")
  |> filter(fn: (r) => r["_field"] == "total")

The error I am getting is the following: error in building plan while starting program: cannot query an empty range

I assume this is the range that I specify here: range(start: timestamps[0], stop: timestamps[1])

But if I remove some of the last few rows and execute the query again, it seems to select the start and end date as expected:

My understanding is that findColumn(fn: (key) => true, column: "_time") should reduce the table into an array of _time values, and I should be able to reference to them in the next range statement as timestamps[0] and timestamps[1].

What did I do wrong?

Small update. If I have time range dropdown set to e.g. 2h I get the above error message. But if I change it to 2d, everything is working.
Why is that? I am not using the v.timeRangeStart or v.timeRangeStop anywhere in the query…