2010-02-19 13 views
6

Ich habe eine Abfrage ausgeliehen und für meine eigenen Zwecke angepasst, aber ich mag das nicht tun, wenn ich nicht ganz sicher bin, was es tut. SQL-Dokumente sind für diese Klausel weniger als beschreibend. Hier ist, was ich geliehen und modifiziert habe, kannst du mir sagen, was es im Grunde macht?Könnte jemand bitte erklären OVER

(SELECT Id FROM 
    (
     SELECT 
      Id 
      ,RANK() OVER (PARTITION BY DropStatusId ORDER BY StatusDate DESC) [Rank] 
     FROM 
      [dbo].[tblLHTrackingHistory] [TempHistory] 
     WHERE 
      [TempHistory].[DropStatusId] = [DropStatus].[Id] 
    ) [TT1] WHERE [Rank] = 1 
) 
+1

+1 für "nicht gerne tun, wenn ich nicht ganz sicher bin, was es tut" – bernie

Antwort

5

Die OVER Klausel bedeutet, dass Sie Analytik (vs sagen Aggregate) verwenden. Per OVER documentation:

Bestimmt die Partitionierung und Reihenfolge des Rowset, bevor die zugeordnete Fensterfunktion angewendet wird.

Im Gegensatz zu Aggregaten ist für die Analytik keine GROUP BY zu definieren.

+0

+1 für die Referenzierung der Dokumentation – bernie

2

Lesen Sie this, es ist ziemlich geradlinig. "Kredit an Jeff Smith"

3

Große Antworten bisher.
Manchmal ist ein visuelles Beispiel hilft:

DropStatusId StatusDate Rank 
1    2010-02-19 1 < 
1    2010-02-18 2 
1    2010-02-17 3 
2    2010-02-18 1 < 
2    2010-02-15 2 
2    2010-02-13 3 
2    2010-02-12 4 

Die "Partition" ist die Aufzeichnungen für einen bestimmten DropStatusId.

Verwandte Themen