Google bigquery 在bigquery中查询最热门的事物?

Google bigquery 在bigquery中查询最热门的事物?,google-bigquery,Google Bigquery,我有多个地点的每日收入数据。以下是一个例子: +---------+------------+----------+------------+ | ID | location | value | timestamp | +---------+------------+----------+------------+ | 1 | LA | 15.000 | 2019-02-12 | | 2 | SF | 23.00

我有多个地点的每日收入数据。以下是一个例子:

+---------+------------+----------+------------+
|    ID   |  location  |  value   | timestamp  |
+---------+------------+----------+------------+
| 1       | LA         |  15.000  | 2019-02-12 |
| 2       | SF         |  23.000  | 2019-02-10 |
| 3       | NYC        |  9.000   | 2019-02-10 |
| 4       | LA         |  2.500   | 2019-02-09 |
+---------+------------+----------+------------+
我想找到前三个趋势位置。输出应如下所示:

+----------+------------+----------+----------------+
|   rank   |  location  |  growth  | growth_percent |
+----------+------------+----------+----------------+
| 1        | SF         |  23.000  | 0.75           |
| 2        | LA         |  17.500  | 0.62           |
| 3        | NYC        |  9.000   | 0.43           |
+----------+------------+----------+----------------+
我认为使用
RANK()
函数可以解决这个问题。我从以下几点开始:

SELECT location, 
  RANK() OVER (PARTITION BY location ORDER BY timestamp) as rank
FROM `revenues`
GROUP BY location, timestamp
但这会多次返回一个位置。关于如何创建这种趋势查询,您有什么想法吗?

试试这个:

WITH `data` AS(
  SELECT 1 AS ID, 'LA' AS location, 15000 AS value, '2019-02-12' AS timestamp UNION ALL
  SELECT 2 AS ID, 'SF' AS location, 23000 AS value, '2019-02-10' AS timestamp UNION ALL
  SELECT 3 AS ID, 'NYC' AS location, 9000 AS value, '2019-02-10' AS timestamp UNION ALL
  SELECT 4 AS ID, 'LA' AS location, 2500 AS value, '2019-02-09' AS timestamp
)

SELECT
  RANK() OVER (ORDER BY SUM(value) DESC) AS rank,
  location,
  SUM(value) AS growth
FROM `data`
GROUP BY
  location
其结果是:

[
  {
    "rank": "1",
    "location": "SF",
    "growth": "23000"
  },
  {
    "rank": "2",
    "location": "LA",
    "growth": "17500"
  },
  {
    "rank": "3",
    "location": "NYC",
    "growth": "9000"
  }
]

通过分组位置,您可以删除查询中观察到的重复项。

谢谢Willian!如何在结果中包含时间戳以使结果可按时间过滤?由于存在聚合步骤,因此必须对时间戳应用一些函数,以便产生一个代表性值,例如应用
max
min