2017-08-07 5 views
-4

Ich bin mit einer Abfrage zu kämpfen. Ich habe eine Tabelle, die hat +/- diese StrukturWählen Sie MIN und MAX Datum und ihre benachbarten Spalten

RowNo Event  Cty  Ctry  Arrival    Departure 
    1  LL  Cty_B Ctry_B 2017-07-04 06:00:00 2017-07-04 06:30:00 
    2  LL  Cty_A Ctry_A 2017-07-04 07:00:00 2017-07-04 07:30:00 

Was ich von diesem benötigen, ist

RowNo Event  Cty  Ctry  Arrival    Departure 
    1  LL  Cty_B Ctry_B 2017-07-04 06:00:00 2017-07-04 07:30:00 

Ziemlich einfach stuf könnte man sagen, aber ich kann keine Lösung

finden

Wenn ich GROUP BY benutze, kann ich Cty und Ctry nicht mit einbeziehen, weil das zu zwei verschiedenen Datensätzen führt. Wenn ich MIN oder MAX auf die Cty und Ctry anwenden, in diesem Beispiel wird MIN mir die falschen Daten geben, da es die alphabetische Reihenfolge "Cty_A" wählt, und einige von euch könnten sagen "Use MAX Then" Aber das Problem ist I weiß nicht, welche alphabetische Reihenfolge die Cty und Cry sind, also, wenn ich MAX und Cty_A ist in der ersten Reihe, dann wird MAX wählen Cty_B

irgendwelche Gedanken?

+1

Warum ROWNO 1? ... – Mihai

+1

Natürlich verstehe ich nicht die Anforderungen, aber ich weiß nicht, warum Sie Cty_B und Ctry_B in der Ergebnismenge enthalten wollen würden, wenn die An- und Abreisewerte (MINs und MAXes) gelten nicht unbedingt für die Stadt und das Land. Bist du sicher, dass du sie brauchst? –

+1

Stimmt es, dass Sie das Ankunftsdatum von Datensatz 1 und das Abreisedatum von R2 möchten? –

Antwort

0

Nicht sicher über Ihre Gruppierungsspalte, aber ich denke, Sie suchen Abfrage wie folgt:

Select * from (
    Select *, RowN = Row_Number() over(order by RowNo), 
      MinArrival = min(arrival) over(), 
      MaxDeparture = Max(departure) over() 
     from yourtable) a 
    Where a.RowN = 1 

Wenn Sie möchten, schließen Spalte Gruppierung dann schließen sie in Rown als Row_Number() über (Partition von yourgroupingcolumn bestellen von RowNo) und die gleiche Partition von in min und max, wenn Sie min und max für bestimmte Gruppe benötigen

0

Es scheint, als ob Sie wollen die Daten aus der min RowNo und fügen Sie die maximale Datum zu.

;with cte as --This will return the aggregates you want 
(
select min(RowNo) as RowNo 
    , event 
    , MIN(Arrival) Arrival    
    , MAX(Departure) Departure 
from table 
group by event 
) 
select t.RowNo 
    , c.event 
    , t.Cty 
    , t.Ctry 
    , c.Arrival 
    , c.Departure 
from table t 
join cte c on c.RowNo=t.RowNo 
+0

Liste OrderNumber ist der Link als Schalter aus meiner Gruppe, aber Sie haben das in der Frage nicht klargestellt. Ich musste annehmen, dass es ein Ereignis war. – KeithL