Это почти похоже, что вы можете исключить самостоятельное соединение на t2
и заменить
t1.time_stamp - t2.time_stamp
с чем-то вроде
t1.time_stamp - lag(t1.time_stamp) over (partition by col1, col2 order by time_stamp)
Различные фильтры на t1
и t2
на col4 и col5 - вот что мешает вам сделать это.
Аналитические функции применяются после где / сгруппировать в основном запросе, поэтому вам нужно иметь один фильтр для t1
, чтобы использовать lag / lead для указания следующих или предшествующих строк в последовательности.
Кроме того, вам нужно отправить сумму / группу во внешний запрос для агрегирования после аналитической функции:
select col1, col2, sum(timestamp_diff) from (
select col1, col2, timestamp - lag(timestamp) over(.....) as timestamp_diff
where ....
) group by col1, col2