У меня есть таблица со следующей структурой:
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
.