У меня есть таблица Athena с 4 столбцами (A, B, C, D)
, и я хочу найти:
- количество строк, связанных с каждой уникальной комбинацией
A
& B
- значение C самой последней строки для той же пары
A
& B
, где 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