Big Query / SQL поиск "новых" данных в диапазоне дат - PullRequest
1 голос
/ 04 мая 2020

У меня довольно большой журнал событий со столбцами:

id, timestamp, text, user_id

Текстовое поле содержит множество вещей, например:

Road: This is the road name
City: This is the city name
Type: This is a type
etc..

Я хотел бы получить результат в следующее:

Given a start and end date, how many **new** users used a road (that haven't before) grouped by road.

У меня есть несколько частей этого рабочего штрафа (например, общее количество пользователей, группировка, диапазон дат и т. д. SQL для получения новых пользователей: ссылаясь на это, я попробовал такие решения, как SELECT AS STRUCT для подзапросов, среди прочего.

В конечном итоге, я бы хотел увидеть такой результат:

road, total_users, new_users

Любая помощь будет очень полезной. оценили.

1 Ответ

1 голос
/ 04 мая 2020

Если я правильно понимаю, вы хотите что-то вроде этого:

select road, counif(seqnum = 1) as new_users, count(distinct user_id) as num_users
from (select l.*,
             row_number() over (partition by l.user_id, l.text order by l.timestamp) as seqnum
      from log l
      where l.type = 'Road'
     ) l
where timestamp >= @timestamp1 and timestamp < @timestamp2
group by road;

Это предполагает, что у вас есть столбец, который указывает тип (то есть "дорога") и другой столбец с названием дороги ( т.е. "Елисейские поля").

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