#sql #postgresql
#sql #postgresql
Вопрос:
Ниже приведен пример рассматриваемого набора данных для просмотра страниц.
Представленные записи отсортированы в порядке возрастания по временной метке.
Мне нужно вычислить некоторые показатели для каждого сеанса из набора данных.
Проблема в том, что нет четкого идентификатора для сеанса. Единственное, что доступно, — это is_a_new_session
флаг, который служит своего рода разделителем между сеансами. Итак, в данном примере существует 5 отдельных сеансов.
Как я мог бы сгенерировать какой-то идентификатор сеанса и добавить его в набор данных, чтобы позже я мог использовать его для группировки по сеансам?
Ответ №1:
Используйте совокупную сумму для определения групп, а затем агрегируйте:
select min(timestamp), max(timestamp), . . . -- whatever columns you want
from (select t.*,
sum(is_a_new_session) over (order by timestamp) as grp
from t
) t
group by grp;
Комментарии:
1. Это было так просто.. Смущен тем, что сам этого не видел. Спасибо, Гордон!