2016-06-23 2 views
-1

Ich muss eine Oracle SQL-Abfrage schreiben. Ich habe einen Tabellennamen stop:Wie schreibe ich eine SQL-Abfrage, um die spezifischen Spalten der mehreren Zeilen der einzelnen Tabelle zu kombinieren?

und mit zwei Reihen wie folgt:

STOP_ID LOCATION CONTRACT STOP_ORDER PICKUP_DT (IN TIME) DROP_DT (OUT TIME) 
----------------------------------------------------------------------------- 
183  ABC   507  1 6/20/2016 6:25:00 AM 6/20/2016 6:25:00 AM 
184  CSD   507  2 6/20/2016 9:20:00 AM 6/20/2016 9:20:00 AM 

Nun ich die Ausgabe auf diese Weise wollen, ich brauche die (in und out-Zeiten) zu zeigen, von Ort CYB zu BNY .

IN Zeit der CYB und OUT Zeit des BNY in der Ausgabe

CONTRACT PICKUP_DT (IN TIME) DROP_DT (OUT TIME) LOCATION 
-------------------------------------------------------------- 
507  6/20/2016 6:25:00 AM 6/20/2016 9:20:00 AM CYB->BNY 

Bitte helfen

ich die Abfrage Ausgang für die alle Verträge IDs muß, die für die letzten in der Stopp-Tabelle gibt es 2 Jahr auf der Basis einer weiteren Spalte create_date in der Stopptabelle.

Die Kriterien wären die gleichen wie ich erklärte, dass es für jede Vertrags-ID gibt es zwei Stopps (1 und 2).

+0

Gibt es immer zwei Sätze verwandter Zeilen? Wie werden sie identifiziert? – OldProgrammer

+0

Ja, es wird zwei Sätze von Zeilen geben, die sich auf den Vertrag und die erwähnten Orte (CYB und BNY) in der Tabelle beziehen. Es gibt auch andere Standorte, aber ich muss an den erwähnten Orten arbeiten – SSV

+0

Aber Sie zeigen zwei verschiedene Vertragsnummern (507,508). Wie beziehst du die zwei Zeilen? Es muss einen gemeinsamen Wert geben, um die zwei Zeilen miteinander zu verbinden. – OldProgrammer

Antwort

2
select c1.contract, c1.pickup_dt, c2.drop_dt, c1.location||'->'||c2.location 
from stops c1 
inner join stops c2 on (c1.contract = c2.contract) 
where c1.contract = 507 
and c1.stop_order =1 
and c2.stop_order = 2 
+0

Ich bekomme nur die Daten, aber nicht zusammen mit der Zeit in der Abfrage ausgegeben. Wie in der Frage können Sie sehen, dass das Datum ist gleich, aber die Zeit ist für alle Zeilen unterschiedlich. In der DB sind Daten in dem Format, das ich als Frage gepostet habe. Ich brauche Zeit auch in der Ausgabe mit dem Datum – SSV

+0

Datentyp im Orakel für die pickup_dt und drop_dt verwendet werden DATE – SSV

+0

Es funktioniert Great und Zeit Problem gelöst – SSV

0

Hier ist eine Lösung, wenn Sie analytische Funktionen verwenden möchten. Dies vermeidet Self-Joins.

select contract, pickup_dt, drop_dt, location 
from (
select contract 
    , lag(pickup_dt) over (partition by contract order by stop_order) pickup_dt 
    , drop_dt 
    , stop_order 
    , location || '->'||lag(location) over (partition by contract order by stop_order) location 
from stop) 
where stop_order = 2 
Verwandte Themen