Те, кто слушал более 10 минут каждый месяц в течение последних 6 месяцев - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь выяснить количество пользователей, которые прослушивали более 10 минут каждый месяц в течение последних 6 месяцев.

У нас есть это событие: Song_stopped_listen и один атрибут session_progress_ms

Теперь я пытаюсь увидеть ежемесячную эволюцию числа этой когорты за последние 6 месяцев.

Я использую bigquery, и это запрос, который я пробовал, но я чувствую, что что-то не так семантически, но я не могу понять:

SELECT 
CONCAT(CAST(EXTRACT(YEAR FROM DATE (timestamp)) AS STRING),"-",CAST(EXTRACT(MONTH FROM DATE (timestamp)) AS STRING)) AS date
,SUM(absl.session_progress_ms/(1000*60*10)) as total_10_ms, COUNT(DISTINCT u.id) as total_10_listeners
FROM ios.song_stopped_listen as absl
LEFT JOIN ios.users u on absl.user_id = u.id 
WHERE absl.timestamp > '2018-05-01'
Group by 1 
HAVING(total_10_ms > 1) 

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

Пример данных:

user_id | session_progress_ms | timestamp
1       |         10000       |    2017-10-10 14:34:25.656 UTC

Что я хочу получить:

||Month-year | Count of users who listened to more than 10 mins
|2018-5     | 500
|2018-6     | 600
|2018-7     | 300
|2018-8     | 5100
|2018-9     | 4500
|2018-10    | 1500
|2018-11    | 1500
|2018-12    | 2500

1 Ответ

0 голосов
/ 14 декабря 2018

Используйте несколько уровней агрегации:

select user_id
from (select ssl.user_id, timestamp_trunc(timestamp, month) as mon,
             sum(ssl.session_progress_ms/(1000*60)) as total_minutes
      from ios.song_stopped_listen as ssl 
      where date(ssl.timetamp) < date_trunc(current_date, month) and
            date(ssl.timestamp) >= date_add(date_trunc(current_date, month) interval 6 month), 
      group by 1, 2 
     ) u
where total_minutes >= 10 
group by user_id
having count(*) = 6;

Чтобы получить количество, просто используйте это как подзапрос с count(*).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...