2016-06-13 4 views
0

folgenden this question hier ist eine FortsetzungHistogramm von Abständen zwischen mehreren Tabellen

Hintergrund Ich habe 2 Datenbanken: Ereignisse (400k Zeilen für das ganze Jahr) und Autos (6 Millionen Zeilen für jeden Monat). ein kleineres Beispiel ist here, das so aussieht input db Ereignisse haben Standorte x y. Autos haben car_id, time_now, time_prev, time_next sowie Standorte x y.

Das gewünschte Ergebnis wäre ein Histogramm der Entfernungen von jedem Ereignis zu allen Autos zum Zeitpunkt der Ereignis-Delta-Zeit. Alternativ wäre es gut, für jedes Ereignis eine Tabelle mit Entfernungen zu jedem Auto zum Zeitpunkt des Ereignisses-Delta zu haben. Und wenn nichts mehr funktioniert, fügen Sie vielleicht den Tabellenereignisspalten other_car_0min, engste_car_5min, engste_car_15min, engste_car_30min hinzu.

Ich dachte, ST_Distance zu verwenden, um die Abstände zu berechnen (PostGIS-Erweiterung).

Ich hatte auch time_prev und time_next erstellt, weil ich dachte, um zu überprüfen, ob die Zeit des Ereignisses events.date_ ± 1 Stunde in das Intervall von time_prev zu time_now oder von time_now zu time_next fällt.

Frage: Nun, wie um alles in der Welt mache ich das?

aktualisieren zu klären, habe ich Ergebnisse zu here gewünscht aussehen wie diese results

Antwort

0

Ich glaube, ich eine Antwort gefunden. Folgendes hat funktioniert:

--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;