以下this question这是续集
背景我有2个数据库:事件(整个年份为400k行)和汽车(每月6百万行)。较小的样本here看起来像这样 事件有位置x y。汽车有car_id,time_now,time_prev,time_next以及位置x y。
期望的结果将是在事件±delta时间具有从每个事件到所有汽车的距离的直方图。 或者,对于每个事件来说,在事件±delta时,每辆车的距离表都很好。如果没有任何效果,可以添加到表事件列nearest_car_0min,nearest_car_5min,nearest_car_15min,nearest_car_30min。
我想用ST_Distance
来计算距离(PostGIS扩展)。
我还创建了time_prev和time_next因为我想检查事件events.date_±1小时的时间是否在从time_prev到time_now或从time_now到time_next的时间间隔内。
问题:嗯,我到底怎么做?
更新以澄清,我将所需结果添加到here,看起来像这样
答案 0 :(得分:0)
我想我找到了答案。以下工作:
--create empty table for results and fix key
create table results
(
resultID serial NOT NULL,
vehicle_id numeric(10,0),
eventid numeric(10,0),
deltaMIN interval MINUTE,
distance_m32138 double precision,
eventtime timestamp without time zone,
time_now timestamp without time zone,
time_prev timestamp without time zone,
time_next timestamp without time zone
)
;
alter table results add CONSTRAINT results_pkey PRIMARY KEY (resultID);
INSERT INTO results
( vehicle_id, eventid, deltaMIN, distance_m32138, eventtime, time_now, time_prev,time_next)
select
vehicle_id,
eventid,
deltaMIN,
ST_Distance (
ST_Transform(toy_events.geom ,32138),
ST_Transform(toy_cars.geom ,32138)
) AS distance_m32138,
eventtime, time_now, time_prev, time_next
from
toy_events,
toy_cars,
deltas
where
eventtime between time_prev and time_next
or
(
eventtime - deltamin between time_prev and time_now
or
eventtime + deltamin between time_now and time_next
)
;
select * from results;