2009-07-08 12 views
4

Ich habe so etwas wie die Struktur folgende Daten:SQL min/max-Gruppe durch Frage

 
Category StartDateTime  EndDateTime 
=============================================== 
1   12/1/2009 12:00  12/1/2009 12:12 
1   12/1/2009 04:00  12/1/2009 04:20 
2   12/2/2009 10:15  12/2/2009 10:22 
2   12/2/2009 11:00  12/2/2009 11:01 

Ich möchte die min und max Startdate EndDateTime für jede Kategorie. Wie folgt aus:

 
Category MinStartDateTime MaxEndDateTime 
=============================================== 
1   12/1/2009 12:00  12/1/2009 04:20 
2   12/2/2009 10:15  12/2/2009 11:01 

Mit min & max mit einer Gruppe nach Kategorie scheint nicht zu funktionieren:

select 
    Category, 
    min(StartDateTime) [MinStartDateTime], 
    max(EndDateTime) [MaxDateTime] 
from 
    MyTable 
group by 
    Category 
order by 
    Category, 
    StartDateTime, 
    EndDateTime 

Ich habe auch versucht, zwei Innen für jede min auf einer Unter Abfrage verknüpft und max Aussage scheint jedoch einige Datensätze auszuschließen:

select distinct 
    T1.Category, 
    T1.StartDateTime [MinStartDateTime], 
    T1.EndDateTime [MaxEndDateTime] 

from 
    MyTable T1 

inner join 
    (select 
     Category, 
     min(StartDateTime) [MinStartDateTime] 
    from 
     MyTable 
    group by 
     Category) T2 
on T2.Category = T1.Category and T2.MinStartDateTime = T1.StartDateTime 

inner join 
    (select 
     Category, 
     max(EndDateTime) [MaxEndDateTime] 
    from 
     MyTable 
    group by 
     Category) T3 
on T3.Category = T1.Category and T3.MaxEndDateTime = T1.EndDateTime 

order by 
    T1.Category, 
    T1.encodeStartDateTime, 
    T1.encodeEndDateTime 

Irgendwelche Ideen? Die Datenbank ist Sybase ASE, die SQL-92-konform sein sollte.

Antwort

7

Ihre erste Lösung sieht bis auf die Order by-Klausel korrekt aus; versuchen:

select 
    Category, 
    min(StartDateTime) [MinStartDateTime], 
    max(EndDateTime) [MaxDateTime] 
from MyTable 
group by 
    Category 
order by 
    Category, 
    MinStartDateTime, 
    MaxDateTime 
+0

Schlagen Sie mich, es zu ...;) –

+4

Da die Kategorie aufgrund der Gruppierung einzigartig sein wird, gibt es keine Notwendigkeit (redundant) entweder durch Zeit zu bestellen. –

+0

Ja, indem Sie die korrekten Feldnamen in der Reihenfolge verwenden, indem Sie die Ergebnisse korrigieren. Ich schäme mich vor der Aufsicht. Danke, dass du mich darauf aufmerksam gemacht hast! –