2016-09-28 2 views
0

Dies könnte eine Klonfrage sein, aber keine der anderen Antworten, nach denen ich suchte, ergab für mich einen Sinn. Ich lerne immer noch SQL, also würde ich mich freuen, wenn Sie mich dabei unterstützen würden. Danke im Voraus.SQL Distanzberechnung zwischen 1 Punkt und jedem anderen

Also das Problem ist: Ich habe diese Tabelle (mit mehr Daten drin) und ich brauche den Namen des Flughafens, der am weitesten vom Flughafen Fiumicino entfernt ist (das heißt, ich habe nur 1 Satz Längen- und Breitengrad Daten) und ich muss es mit der Entfernungsfunktion machen. Sql table

+0

Welche Art von Datenbank verwenden Sie? – anakic

+0

Können Sie uns zeigen, was Sie versucht haben und warum es Ihr Problem nicht gelöst hat? – dfundako

+0

Ich entfernte die inkompatiblen Datenbank-Tags. Fügen Sie den für die von Ihnen verwendeten Datenbank zurück. –

Antwort

0

Was auch immer Abstand Funktion, die Sie verwenden (einfache Pythagoreische Gerade für kurze Strecken oder Großkreis Formel für etwas mehr als ein paar tausend Meilen),

Select * from table 
where [DistanceFunction] 
     (Latitude, Longitude, FiumicinoLatitude, FiumicinoLongitude) = 
    (Select Max([DistanceFunction] 
     (Latitude, Longitude, FiumicinoLatitude, FiumicinoLongitude)) 
     From table) 

wenn Sie die am weitesten entfernt vom Flughafen finden von einem beliebigen Flughafen (nicht immer Fiumicino), dann, @code unter der Annahme, Flughafen-Code beliebigen Flughafen:

Select * from table t 
    join table r on r.code = @code 
where [DistanceFunction] 
     (t.Latitude, t.Longitude, r.Latitude, r.Longitude) = 
    (Select Max([DistanceFunction] 
     (Latitude, Longitude, r.Latitude, r.Longitude)) 
3

einfach können Sie folgende sQL-Abfrage

01 laufen

SELECT *, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance FROM table_name;

Wo; anstelle von Meilen

Entfernung von Kilometern zu suchen, ersetzen 3959 mit 6371.

Breite Ihre Eingabe ist

-122 ist Ihre Eingabe Länge

lat Tisch Spaltenname, der Flughafenbreitenwerte enthält

lng ist Tabellenspalte Name, der Flughafen Länge Wert

Weitere Details enthält beantworten: Creating a store locator

0

SQL SERVER

Sie eine Funktion benötigen, wenn Sie versuchen, die am weitesten eine von jedem Flughafen zu finden . Aber seit du FCO gesagt hast, habe ich es für FCO getan.

--temp table for testing 

select 'FCO' as code, 'Fiumicino' as name, 'Rome' as city, 'Italy' as country, 41.7851 as latitude, 12.8903 as longitude into #airports 
union all 
select 'VCE', 'Marco Polo','Venice','Italy',45.5048,12.3396 
union all 
select 'NAP', 'capodichino','Naples','Italy',40.8830,14.2866 
union all 
select 'CDG', 'Charles de Gaulle','Paris','France',49.0097,2.5479 

--create a point from your LAT/LON 
with cte as(
select 
    *, 
    geography::Point(latitude,longitude,4326) as Point --WGS 84 datum 
from #airports), 

--Get the distance from your airport of interest and all others. 
cteDistance as(
select 
    *, 
    Point.STDistance((select Point from cte where code = 'FCO')) as MetersToFiuminico 
from cte) 

--this is the one that's furthest away. Remove the inner join to see them all 
select d.* 
from 
    cteDistance d 
    inner join(select max(MetersToFiuminico) as m from cteDistance where MetersToFiuminico > 0) d2 on d.MetersToFiuminico = d2.m 
Verwandte Themen