我借用了一个查询并根据自己的目的进行了调整,但是当我不完全确定它在做什么时,我不喜欢这样做。 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
)
答案 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,这非常简单。 “归功于杰夫史密斯”