Различные сгруппированные строки на SQL / AWS Афина и AWS Quicksight - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть данные о слежении за пользователем (пользователь и сеанс не упорядочены):

user   session    cummulative_time_spent
A      1          2
A      1          5
A      1          10
A      2          3
B      5          1
B      5          200
B      6          5
B      6          6

Я хочу создать время, потраченное на эту разницу строк, сгруппированных по сеансам. Мой ожидаемый результат такой:

user   session    cummulative_time_spent    duration
A      1          2                         2
A      1          5                         3
A      1          10                        5
A      2          3                         3
B      5          1                         1
B      5          200                       199
B      6          5                         5
B      6          6                         1

Я не знаю, как это сделать на SQL (AWS Афина) или Quicksight.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Как указывает GMB, вам нужна функция lag(). Однако он имеет форму с тремя аргументами, которая упрощает расчет:

select t.*,
       (cumulative_time_spent -
        lag(cumulative_time_spent, 1, cumulative_time_spent) over
           (partition by user, session order by cumulative_time_spent)
       ) as duration
from mytable
1 голос
/ 05 февраля 2020

Вы можете использовать lag():

select
    t.*,
    cumulative_time_spent 
        - coalesce(
            lag(cumulative_time_spent) 
                over(partition by user, session order by cumulative_time_spent), 
            0
        ) duration
from mytable
...