Наивным методом является агрегация.Похоже, это делает то, что вы хотите:
select min(_timestamp), max(_timestamp), throughput,
datediff(day, min(_timestamp), max(_timestamp)) as period_in_min
from t
group by througput;
Однако вы, вероятно, хотите, чтобы это рассматривалось как проблема пробелов и островков.То есть значения 0
могут отображаться как «острова», и вы хотите отдельную строку в наборе результатов для каждого острова.
Если это так, вы можете использовать метод различных номеров строк:
select min(_timestamp), max(_timestamp), throughput,
datediff(day, min(_timestamp), max(_timestamp)) as period_in_min
from (select t.*,
row_number() over (order by _timestamp) as seqnum,
row_number() over (partition by throughput order by _timestamp) as seqnum_t
from t
) t
group by (seqnum - seqnum_t), througput;
Немного сложно объяснить, как это работает.Однако, если вы посмотрите на результаты подзапроса, вы поймете, почему разница в двух значениях номеров строк определяет соседние значения констант.