У меня есть таблица, в которой я храню данные о местоположении пользователей, когда они бегают, ездят на велосипеде, гуляют и т. Д. c. Таблица имеет следующий вид:
CREATE TABLE public.user_location (
app_user_id int4 NOT NULL,
location_uuid uuid NOT NULL,
.....
location_timestamp timestamptz NOT NULL,
app_user_location geometry(POINT, 4326) NOT NULL,
coordinate_accuracy float8 NULL,
);
Поле location_timestamp
содержит местоположение, в которое было записано время, а поле app_user_location
содержит координаты GPS. Данные о местоположении принимаются каждые 100 метров, если пользователь движется (например, езда на велосипеде / бег трусцой и т. Д. c.). За дни, недели и месяцы я собрал миллионы точек. Что я хотел бы сделать, это выяснить, какие пользователи пересекали пути в последние n дней (или в любой данный день), то есть они были рядом друг с другом в один и тот же момент времени. Простым примером будет, если пользователь бегал трусцой в течение 5 км. Мне нужно найти других пользователей, которых он «встречал» во время пробежки.
Я создал индекс для столбца app_user_location
. Далее мне нужно было бы сделать ближайшего соседа для набора баллов для пользователя в данный день (или в данный момент времени). Я могу сделать это в al oop, но мне было интересно, есть ли лучший SQL способ сделать это?
Заранее спасибо.