Возврат 5 самых последних поездок на удостоверение личности - PullRequest
0 голосов
/ 08 мая 2019

У меня есть таблица с количеством совершенных поездок и station_id, и я хочу вернуть 5 самых последних поездок, совершенных для каждого идентификатора (пример изображения таблицы ниже)

Запрос, который я сделал ниже, объединяет идентификаторы станции и самую последнюю поездку, но мне трудно вернуть 5 самых последних

SELECT start_station_id, MAX(start_time) 
FROM `bpd.shop.trips` 
group by start_station_id, start_time

Экскурсия: https://imgur.com/Ebh9FeZ

Любая помощь будет высоко ценится, спасибо!

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

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

SELECT t.*
FROM (SELECT t.*,
              ROW_NUMBER() OVER (PARTITION BY start_station_id ORDER BY start_time DESC) as seqnum
      FROM `bpd.shop.trips` t
     ) t
WHERE seqnum <= 5;
0 голосов
/ 08 мая 2019

Ниже для BigQuery Standard SQL

Вариант 1

#standardSQL
SELECT record.*
FROM (
  SELECT ARRAY_AGG(t ORDER BY start_time DESC LIMIT 5) arr
  FROM `bpd.shop.trips` t
  GROUP BY start_station_id
), UNNEST(arr) record   

Вариант 2

#standardSQL
SELECT * EXCEPT (pos) FROM (
  SELECT *, ROW_NUMBER() OVER(win) AS pos
  FROM `bpd.shop.trips`
  WINDOW win AS (PARTITION BY start_station_id ORDER BY start_time DESC)
) 
WHERE pos <= 5   

Я рекомендую использовать вариант 1 как более масштабируемый вариант

...