2010-02-19 14 views
6

He tomado prestada una consulta y la he adaptado para mis propios fines, pero no me gusta hacer esto cuando no estoy completamente seguro de lo que está haciendo. Los documentos SQL son menos que descriptivos en esta cláusula. Esto es lo que pedí prestado y modificado, ¿puedes decirme qué está haciendo básicamente?¿Podría alguien explicar POR OTRA VEZ

(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 para "no me gusta hacer esto cuando no estoy del todo seguro de lo que está haciendo" – bernie

Respuesta

5

La cláusula OVER significa que está utilizando análisis (frente a decir agregados). Por el OVER documentation:

Determina la partición y el orden del conjunto de filas antes de aplicar la función de ventana asociada.

A diferencia de los agregados, los análisis no requieren un GROUP BY por definir.

+0

+1 para hacer referencia a la documentación – bernie

2

Leer this, es bastante sencillo. "Credit to Jeff Smith"

3

Grandes respuestas hasta el momento.
veces un ejemplo visual ayuda:

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 

La "partición" es el registro de una DropStatusId dado.

Cuestiones relacionadas