代码之家  ›  专栏  ›  技术社区  ›  joshlrogers

有人能解释一下吗

  •  6
  • joshlrogers  · 技术社区  · 15 年前

    我借用了一个查询并将其修改为我自己的目的,但是我不喜欢在我不完全确定它在做什么的时候这样做。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 回复  |  直到 15 年前
        1
  •  5
  •   OMG Ponies    15 年前

    这个 OVER 子句意味着您使用的是分析(而不是聚合)。每个 OVER documentation :

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

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

        2
  •  3
  •   mechanical_meat nazca    15 年前

    到目前为止答案很好。
    有时候,一个可视的例子有助于:

    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
  •  2
  •   dugas    15 年前

    阅读 this 很直接。 “归功于杰夫·史密斯”