exists演算子を使用してみることができます:
from(bucket: "my_bucket")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "my_data")
|> filter(fn: (r) => r["_field"] == "temp1" or r["_field"] == "temp2" or r["_field"] == "temp3" )
|> filter(fn: (r) => exists r._value) // this line will filter out null values
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> yield()