2010-02-19 62 views
6

我借用了一个查询并将其用于我自己的目的,但当我不完全确定它在做什么时,我不喜欢这样做。 SQL文档对此子句的描述不够。这是我借用和修改的内容,你能告诉我它基本上在做什么吗?是否有人可以解释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为“不喜欢这样做,当我不完全确定它在做什么” – bernie 2010-02-19 18:42:57

回答

5

OVER子句意味着你正在使用分析(vs说聚合)。根据OVER documentation

确定应用关联的窗口函数之前的行集的分区和排序。

与聚合不同,分析不需要定义GROUP BY

+0

+1用于引用文档 – bernie 2010-02-19 18:39:11

2

阅读this,这是非常直截了当的。 “信用杰夫史密斯”

3

迄今为止很棒的回答。
有时视觉例子帮助:

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 

“分区”是给定DropStatusId的记录。