2017-01-06 4 views
0

Ok, Frage Sound sehr verwirrend, ich kann einfach nicht mit besseren Titel kommen.Rückgabe Spaltenwert ohne Aggregation für gruppierte Abfrage

Hier ist meine Frage:

SELECT TS.LocationKey, TA.TrailerKey, MAX(TS.ArrivedOnLocal) MaxArrivedOnLocal 
    FROM dbo.DSPTripStop TS 
     INNER JOIN dbo.DSPTripAssignment TA ON TS.TripStopKey = TA.ToTripStopKey AND TA.TrailerKey IS NOT NULL   
    GROUP BY TS.LocationKey, TA.TrailerKey 

Abfrage gibt Liste der Anhänger mit Standorten und letzte Mal, wenn sie an dieser Stelle fallen gelassen wurden. Das ist das, was ich benötige. MAX (Zeit) für den Ort ist ein Ziel.

Aber ich möchte auch wissen, welche DSPTripStop.TripStopKey diese MAX() Zeit passiert ist.

Ich kann nicht nach diesem Wert gruppieren. Ich verstehe, dass es nicht definiert ist (kann mehrere Werte für die gleiche Zeit sein). Für meinen Zweck wird JEDER Zufall arbeiten. Aber ich kann keinen besseren Weg finden, als mich zum zweiten Mal durch MaxArrivedOnLocal zu verbinden, um zu bekommen, was ich brauche.

SQL Server "sieht" diese Daten bereits, wenn MAX() aggregiert ist, irgendeine Möglichkeit, es in dieser Abfrage zu ziehen?

+0

Sie müssen nach dem Auffinden der Ergebnismenge der Haupttabelle beitreten. Dann können Sie andere Felder bekommen. – NEER

Antwort

0

Ich denke, das ist, was Sie wollen. Anstatt eine Gruppe zu erstellen, partitionieren Sie stattdessen, nummerieren Sie die Zeilen, und nehmen Sie dann die oberen 1

+0

Eigentlich, da Sie sagen, dass Ihnen egal welcher Wert ist, ist Rahuls Antwort in Ordnung. Dies wird der Weg sein, damit umzugehen, wenn es darauf ankommt –

+0

Vielleicht war ich nicht klar, aber "zufällig" kann für doppelte MAX-Daten in Ordnung sein, nicht nur zufällig, so dass Rahuls Antwort nicht gut ist. – katit

0

Wenn Sie einen beliebigen Wert für DSPTripStop.TripStopKey benötigen, können Sie MAX selbst verwenden, da dies den neuesten TripStopKey zurückgibt.

SELECT 
     TS.LocationKey, 
     TA.TrailerKey, 
     MAX(TS.ArrivedOnLocal) MaxArrivedOnLocal, 
     MAX(TS.TripStopKey) 
    FROM dbo.DSPTripStop TS 
    INNER JOIN dbo.DSPTripAssignment TA 
    ON TS.TripStopKey = TA.ToTripStopKey 
    AND TA.TrailerKey IS NOT NULL  
GROUP BY TS.LocationKey, TA.TrailerKey 
Verwandte Themen