PostgreSQL группирует, но сортирует внутри функции агрегирования (ST_Makeline) - PullRequest
1 голос
/ 25 октября 2019

У меня есть таблица траекторий в PostgreSQL, и я хочу создать ломаную линию для каждой траектории.

Каждая строка данных содержит datetime (datetime), session_id (строка) и geom (геометрия точки))

Цель состоит в том, чтобы построить каждую полилинию по всем точкам в хронологическом порядке datetime

Я пытался:

select session_id, st_makeline(geom) as geom
from trajectory
group by session_id

Приведенный выше код дает мне полилиниикаждая траектория, но для каждой полилинии порядок был неправильным.

Как упорядочить узлы в полилинии, чтобы они следовали порядку даты-времени?

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Вы можете добавить предложение order by к st_makeline(), как описано в Документах postgis :

select session_id, st_makeline(geom order by datetime) as geom
from trajectory
group by session_id
0 голосов
/ 25 октября 2019

вы используете subquery до order by datetime перед вызовом st_makeline() функции

SELECT gps.session_id, st_makeline(gps.geom) as geom
FROM 
    (SELECT session_id, geom
    FROM trajectory ORDER BY datetime) As gps
GROUP BY gps.session_id;
...