如何(部分)订购选择,以便为每个特定用户ID排序行?

时间:2018-04-23 08:27:12

标签: sql google-bigquery

通常在大型选择上使用ORDER BY在单个节点上运行,这是不可取的。为了解决这个问题,我可以对我的结果进行排序,以便特定用户的时间戳按升序排列,但不一定是全局的。

如何实现这一目标?

E.g。

SELECT *
FROM table
ORDER BY timestamp OVER (PARTITION BY user_id)

在一次考虑一个用户时,应该通过时间戳排序结果。

2 个答案:

答案 0 :(得分:3)

试试这个:

ORDER BY user, timestamp

这将首先对用户进行排序,所有重复的user将按timestamp排序。

更新: 也可以为每列更改订单

ORDER BY user DESC, timestamp ASC

答案 1 :(得分:0)

问题不是很具体,所以很难给出具体的答案。您可以使用此表单的查询:

#standardSQL
SELECT
  user_id,
  ARRAY_AGG(
    STRUCT(user_timestamp, user_event)
    ORDER BY user_timestamp
  ) AS user_attributes
FROM UserTable
GROUP BY user_id

这将构建一个数组,其中包含每个用户ID的用户属性,按用户时间戳排序。