Идентификация результатов по группам и рангам с помощью SQL

У меня есть таблица со следующей структурой:

id          timestamp       area
717416915   18:30:53.063    25.691601
717416915   18:31:34.863    31.200506
717416915   18:32:23.665    25.690088
1994018321  18:32:45.467    37.409171
1994018321  18:33:19.612    37.409171
424164505   18:36:16.634    18.22091
424164505   18:36:36.899    18.210754
424164505   18:37:08.614    19.829266
2394018356  18:37:27.231    79.31705

Что я хочу сделать, так это обобщить значения таким образом, чтобы я мог определить площадь по id, упорядоченную по timestamp. Например, если бы мне нужно было первое значение area, оно было бы следующим :

id          timestamp       area_1
717416915   18:30:53.063    25.691601
1994018321  18:32:45.467    37.409171
424164505   18:36:16.634    18.22091
2394018356  18:37:27.231    79.31705

. И если бы я хотел получить второе значение areaна id, оно было бы следующим :

id          timestamp       area_2
717416915   18:31:34.863    31.200506
1994018321  18:33:19.612    37.409171
424164505   18:36:36.899    18.210754

. Я понимаю, что мне нужно отсортировать по времени, а затем определите первое значение по id. Я не совсем понимаю, как это сделать. То, что я пытался сделать, это следующее (, которое не работает, так как я все еще немного не понимаю, как использовать функцию OVER).

WITH T AS (
    SELECT * OVER(PARTITION BY a.id ORDER BY a.timestamp) AS rnk
    FROM mytable AS a
) 
SELECT area as area_1
FROM T
WHERE rnk = 1
GROUP BY a.id
ORDER BY a.timestamp;

Я планировал использовать rnk=2и т. д., чтобы получить последующие значения площади по id.

5
задан McGarnagle 9 July 2013 в 16:34
поделиться