【问题标题】:Could someone please explain OVER有人可以解释一下吗
【发布时间】:2010-02-19 18:29:03
【问题描述】:

我借用了一个查询并对其进行了调整以用于我自己的目的,但是当我不完全确定它在做什么时,我不喜欢这样做。 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
)

【问题讨论】:

  • +1 表示“当我不完全确定它在做什么时不喜欢这样做”

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


【解决方案1】:

OVER 子句表示您正在使用分析(而不是聚合)。根据OVER documentation

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

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

【讨论】:

    【解决方案2】:

    到目前为止,答案很好。
    有时,视觉示例会有所帮助:

    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 的记录。

    【讨论】:

      【解决方案3】:

      阅读this,它非常简单。 “杰夫·史密斯的功劳”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-22
        • 2016-12-12
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-21
        相关资源
        最近更新 更多