Доступ с 10-го по 70-й элемент в STRUCT - PullRequest
0 голосов
/ 12 июня 2019

У меня есть 3 поля: имя пользователя, tracking_id, отметка времени. У одного пользователя будет несколько строк (у некоторых больше, у некоторых меньше) с разными идентификаторами отслеживания и временными метками для каждого действия, которое он предпринял на моем веб-сайте. Я хочу сгруппировать по имени пользователя и получить идентификаторы отслеживания действий этого пользователя с 10-го по 70-е. Я использую стандартный SQL на BigQuery.

Первая проблема, я не могу найти синтаксис для доступа к диапазону в STRUCT (например, только одна строка или использование предела для получения первых / последних 70 строк). Затем я могу получить изображение после управления доступом к диапазону, может быть проблема с индексом, выходящим за пределы, поскольку у некоторых пользователей может не быть 70 или более действий.

SELECT
  username,
  ARRAY_AGG(STRUCT(tracking_id,
      timestamp)
  ORDER BY
    timestamp
    )[OFFSET (9 to 69)] #??????
FROM
  table

Результатом должна быть таблица с теми же 3 полями: username, tracking_id, timestamp, но вместо того, чтобы содержать ВСЕ строки пользователя, она должна содержать каждого пользователя только с 10-й по 70-ю строку.

1 Ответ

1 голос
/ 12 июня 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT username, 
  ARRAY_AGG(STRUCT(tracking_id, `timestamp`) ORDER BY `timestamp`) AS selected_actions
FROM (
  SELECT * EXCEPT(pos) FROM (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY username ORDER BY `timestamp`) pos
    FROM `project.dataset.table`
  ) 
  WHERE pos BETWEEN 10 AND 70
)
GROUP BY username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...