【发布时间】:2019-08-28 09:08:41
【问题描述】:
我有一个包含 4 列 (A, B, C, D) 的 Athena 表,我想找到:
- 与
A&B的每个唯一组合关联的行数 - 同一
A和B对的最近行的 C 值,其中D是时间戳
例如,如果这是输入数据
+---+---+-----+------------+
| A | B | C | D |
+---+---+-----+------------+
| 1 | 1 | 'a' | 2019-04-04 |
| 1 | 1 | 'b' | 2019-04-03 |
| 1 | 2 | 'c' | 2019-04-02 |
| 1 | 3 | 'd' | 2019-04-01 |
| 2 | 2 | 'e' | 2019-04-03 |
| 2 | 2 | 'f' | 2019-04-04 |
+---+---+-----+------------+
这是想要的输出
+---+---+----------+-------+
| A | B | newest_C | count |
+---+---+----------+-------+
| 1 | 1 | 'a' | 2 |
| 1 | 2 | 'c' | 1 |
| 1 | 3 | 'd' | 1 |
| 2 | 2 | 'f' | 2 |
+---+---+----------+-------+
我不擅长查询,我的最佳尝试如下:
加入两个子查询,其中一个进行计数,另一个按时间对每一行进行排名。然后在连接上,只选择排名最高的行。
WITH t1 AS (
SELECT A, B, count(*)
FROM data
GROUP BY A, B
),
t2 AS (
SELECT A, B, C, RANK() OVER (PARTITION BY A, B ORDER BY D DESC) AS rank
FROM data
)
SELECT t1.A, t1.B, t2.newest_C, t1.count
FROM t1 LEFT JOIN t2 ON t1.A = t2.A AND t1.B = t2.B
WHERE rank = 1
【问题讨论】:
标签: sql amazon-athena presto