2017-02-08 2 views
2

Ich habe 2 Tabellen in Zugriff und ich muss eine Verknüpfung basierend auf einer gemeinsamen Spalte (dest) und nächste Zeit in Tabelle B, die gleich oder früher als Tabelle A ist .Zugreifen auf zwei Tabellen auf die engste Zeit

Flüge (Tabelle A)
ID | dest | land 
1 | SUN | 1/1/2017 8:52:00 AM 
2 | SEA | 1/1/2017 4:39:00 AM 

Wetter (Tabelle B)

ID | dest | time    | vis 
1 | SUN | 1/1/2017 8:15:00 AM | 10 
2 | SUN | 1/1/2017 8:35:00 AM | 5 
3 | SUN | 1/1/2017 8:55:00 AM | 2 
4 | SEA | 1/1/2017 2:48:00 AM | 7 
5 | SEA | 1/1/2017 3:52:00 AM | 10 
6 | SEA | 1/1/2017 4:49:00 AM | 2 

Gewünschte Ergebnisse (Tabelle C)

ID | dest | land    | time    | vis 
1 | SUN | 1/1/2017 8:52:00 AM | 1/1/2017 8:35:00 AM | 5 
2 | SEA | 1/1/2017 4:39:00 AM | 1/1/2017 3:52:00 AM | 10 

Ich habe festgestellt, wie man auf der 'dest' UND die nächste Zeit beitreten. Tabelle A enthält ~ 25.000 Zeilen und Tabelle B ~ 100.000.

Antwort

1

Ich würde es tun, wie folgt:

für die Bereitstellung dieser Lösungen
SELECT Flights.dest, Flights.land, 
weather.time, weather.vis 
FROM Flights INNER JOIN weather ON Flights.dest = weather.dest 
WHERE weather.time = (
    select top 1 time 
    from weather 
    where dest=flights.dest and time <= flights.land 
    order by time desc); 
+0

Danke:

SELECT Flights.dest, Flights.land, (select time from weather where id = (select top 1 id from weather where dest=flights.dest and time <= flights.land order by time desc)) AS [time], (select vis from weather where id = (select top 1 id from weather where dest=flights.dest and time <= flights.land order by time desc)) AS vis FROM Flights; 

Alternativ kann das gleiche Ergebnis mit dieser Abfrage erreicht werden. Ich habe die erste Option ausprobiert und konnte die Abfrage nicht abschließen, wenn der Teil 'time <= flights.land' enthalten war. Die Abfrage würde ausgeführt, aber nie abgeschlossen, auch nicht mit einer kleinen Datenmenge. Mit der zweiten Lösung mit dem INNER JOIN würde es in ~ 4 Minuten mit einer kleinen Menge von Daten vervollständigen, aber nach 21 Minuten war mein kompletter Datensatz immer noch nicht vollständig. Irgendwelche Vorschläge, um es zu beschleunigen, oder vielleicht einen zweistufigen Prozess? Ich habe die in der Abfrage verwendeten Felder indiziert. –

+0

Sie benötigen einen Index für die 'dest'-Spalte in beiden Tabellen und für die 'Land'-Spalte in der Flugtabelle und für die' Zeit'-Spalte in der Wettertabelle. Ich nehme an, dass die 'ID' der Primärschlüssel ist - daher ist kein Index dafür erforderlich – cha

Verwandte Themen