Sql 每个ID返回5次最近的行程

Sql 每个ID返回5次最近的行程,sql,google-bigquery,bigquery-standard-sql,Sql,Google Bigquery,Bigquery Standard Sql,我有一个表,上面有出行次数和车站id,我想返回每个id最近的5次出行。下面是表的示例图像 我在下面的查询汇总了站点id和最近的行程,但我很难返回最近的5次 SELECT start_station_id, MAX(start_time) FROM `bpd.shop.trips` group by start_station_id, start_time 行程: 任何帮助都将不胜感激,谢谢 您可以使用行号: 您可以使用行号: 下面是BigQuery标准SQL 选择1 #standardS

我有一个表,上面有出行次数和车站id,我想返回每个id最近的5次出行。下面是表的示例图像

我在下面的查询汇总了站点id和最近的行程,但我很难返回最近的5次

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

任何帮助都将不胜感激,谢谢

您可以使用行号:

您可以使用行号:


下面是BigQuery标准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,因为下面更具可扩展性的选项适用于BigQuery标准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作为更具可伸缩性的选项