Начиная с PostgreSQL 9.0+, поддерживается использование агрегатных выражений . Например, вы можете использовать ORDER BY
для сортировки строк перед вызовом функции PostGIS ST_MakeLine
, как показано ниже:
SELECT ST_MakeLine(position ORDER BY timestamp)::bytea AS line
FROM recorded_positions
WHERE dataset_id = 98
В моей заявке есть попытка сделать это, но ясно, что это не тот случай использования order_by()
:
queryset = queryset.order_by('timestamp') \
.annotate(line=Func('position', function='ST_MakeLine')) \
.values('line')
Конечно, это дает следующий неправильный SQL для того, что я хочу (и недопустимый из-за использования order_by
в неагрегированном столбце):
SELECT ST_MakeLine(position)::bytea AS line
FROM recorded_positions
WHERE dataset_id = 98
ORDER BY timestamp ASC
Возможно ли это вообще с Django или мне придется что-то еще делать (необработанный запрос, подзапрос и т. Д.) Для достижения того же результата?