Подсчет времени проведенного в сеансе с правилами - PullRequest
0 голосов
/ 16 сентября 2018

Допустим, базовая таблица содержит информацию о каждом действии (каждой строке), которое клиент выполняет во время сеанса приложения.Когда начинается каждый сеанс, записывается действие = «Показать», а когда пользователь заканчивает сеанс, записывается действие = «Скрыть».И для любого другого действия, которое делает пользователь, записывается между Показать и Скрыть с разными именами действий.К сожалению, нет столбца sessionID, который я пытаюсь создать на основе этой информации.

Предположим, что два действия «Показать» и «Скрыть» выполняются только при запуске сеанса и по окончании сеанса.

Имея данную информацию, я хотел бы суммировать данные, создавая уникальный идентификатор сеанса для каждого сеанса (может быть числами или строками) и записывать время, проведенное в сеансе.

Я использую RedshiftSQL, поэтому, если в Redshift есть какая-то специальная функция, которую я могу использовать, используйте ее.

base table and desired output

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете попробовать написать два подзапроса и сделать номер строки на customer

один для action = 'show', другой для action = 'Hide'.

затем join по номеру строки, которыйозначает начало и конец времени.

SELECT t1.customer,
       t2.rn,  
       DATEDIFF(mins, t1.time,t2.time) spentTime
FROM (
        SELECT *,
          ROW_NUMBER() OVER(PARTITION BY customer ORDER BY time) rn 
    FROM bastTable 
    WHERE action = 'show'
) t1 JOIN (
    SELECT *,
           ROW_NUMBER() OVER(PARTITION BY customer ORDER BY time) rn  
    FROM bastTable 
    WHERE action = 'Hide'
) t2 on t1.rn = t2.rn and t1.customer = t2.customer
...