有人可以解释一下

时间:2010-02-19 18:29:04

标签: sql sql-server database sql-server-2005 tsql

我借用了一个查询并根据自己的目的进行了调整,但是当我不完全确定它在做什么时,我不喜欢这样做。 SQL文档对此子句的描述不够。这是我借用和修改的内容,你能告诉我它基本上做了什么吗?

(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
)

3 个答案:

答案 0 :(得分:5)

OVER子句意味着您正在使用分析(比如聚合)。根据{{​​3}}:

  

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

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

答案 1 :(得分: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的记录。

答案 2 :(得分:2)

阅读this,这非常简单。 “归功于杰夫史密斯”