So erhalten Sie die nächsten Daten in Oracle SQL

8

Zum Beispiel habe ich 2 Stundenpläne: T1

%Vor%

und T2

%Vor%

Ich brauche Zeit von T1, die der Zeit von T2 am nächsten ist. Zwischen diesen Tabellen besteht keine Beziehung. Es sollte so etwas sein:

%Vor%

Aber ich verstehe es nicht. Irgendwelche Vorschläge?

    
fen1ksss 18.12.2012, 08:32
quelle

5 Antworten

4

Ich glaube, das ist die Suchanfrage, nach der Sie suchen:

%Vor%

Stellen Sie sicher, dass die Zeitspalten denselben Datumsteil haben, weil der Teil t2.time - t1.time ansonsten nicht funktioniert.

BEARBEITEN : Danke für das Akzeptieren, aber Bens Antwort ist besser. Es verwendet Oracle analytische Funktionen und wird viel besser funktionieren.

    
mavroprovato 18.12.2012, 08:56
quelle
7

Sie müssen nur einen einzigen kartesischen Join verwenden, um Ihr Problem zu lösen, im Gegensatz zu den anderen Lösungen, die multiple verwenden. Ich nehme an, die Zeit wird als VARCHAR2 gespeichert. Wenn es als Datum gespeichert ist, können Sie die TO_DATE-Funktionen entfernen. Wenn es als Datum gespeichert wird (ich würde dies sehr empfehlen), müssen Sie die Datumsabschnitte entfernen

Ich habe es leicht ausschweifend gemacht, also ist es offensichtlich, was vor sich geht.

%Vor%

Im Grunde berechnet dies die absolute Differenz zwischen jeder Zeit in T1 und T2 und wählt dann die kleinste Differenz in T2 ID ; Rückgabe der Daten von T1.

Hier ist es im SQL Fiddle Format .

Das weniger schöne (aber kürzere) Format ist:

%Vor%     
Ben 18.12.2012 08:59
quelle
2

Dieser hier wählt die Reihe (n) von T1 aus, die den geringsten Abstand zu allen in T2 hat:

%Vor%

(getestet mit mysql, hoffe du bekommst kein ORA davon)

Bearbeiten : Laut dem letzten Kommentar sollte es so aussehen:

%Vor%

Produziert:

%Vor%     
pbhd 18.12.2012 08:49
quelle
2

Eine weitere Möglichkeit, analytische Funktionen zu verwenden. Kann seltsam sein:)

%Vor%

Nach SQLFiddle ... und darüber hinaus!

    
knagaev 18.12.2012 12:50
quelle
1

Versuchen Sie diese Abfrage ein wenig lang, ich werde versuchen, es zu optimieren

%Vor%     
Ajith Sasidharan 18.12.2012 09:14
quelle

Tags und Links