Okay, that was a bit more straightforward than I thought it would be. This appears to set it up nicely and along with the labelling set to kb/s appears to show reasonably well what the overall speed is.
from(bucket: "telegraf")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "net" and r["_field"] == "bytes_sent" and r["host"] == "Tower")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> difference(columns: ["bytes_sent"])
difference() takes the table of data and creates a new table, with each row now containing the difference between each selected value, from the bottom up.