SQL группирует только следующие строки

# #sql #google-bigquery

Вопрос:

У меня есть таблица со следующими полями:

  • идентификатор пользователя — идентификатор пользователя
  • gate_id — идентификатор ворот, через которые прошел пользователь
  • время — время, в течение которого пользователь прошел ворота.

Я хочу получить список ворот, которые прошли пользователи (идентификатор пользователя, идентификатор ворот), упорядоченные по времени. покупайте иногда пользователь проходит через ворота несколько раз один за другим. Я хочу игнорировать эти дела.

например, если у нас есть:

идентификатор пользователя идентификатор шлюза
1 13
1 13
1 11
1 13

он проигнорирует только следующие дубликаты и вернет:

идентификатор пользователя идентификатор шлюза
1 13
1 11
1 13

Как я могу это сделать? Спасибо!

Ответ №1:

Используйте функцию LAG окна, чтобы найти предыдущую gate_id строку user_id , упорядоченную по вашему time столбцу, а затем отфильтровать нежелательные:

 SELECT user_id, gate_id
FROM (
  SELECT 
    user_id, 
    gate_id, 
    lag(gate_id) OVER (
      PARTITION BY user_id 
      ORDER BY time
    ) AS previous_gate_id
  FROM t
) t
WHERE previous_gate_id IS NULL OR previous_gate_id <> gate_id