【问题标题】:I assume Row_Number doesn’t act only on rows of the window frame我假设 Row_Number 不仅仅作用于窗框的行
【发布时间】:2011-02-13 23:55:51
【问题描述】:

a) 引用来自http://www.postgresql.org/docs/current/static/tutorial-window.html

对于每一行,在其分区内都有一组行,称为其窗口框架。许多(但不是全部)窗口函数只作用于窗框的行,而不作用于整个分区。默认情况下,如果提供了 ORDER BY,则该框架包含从分区开始到当前行的所有行,加上根据 ORDER BY 子句等于当前行的任何后续行

我假设 Row_Number 不只作用于窗框的行,而是总是作用于分区的所有行?

b)

默认情况下,如果提供了 ORDER BY,则框架包含从分区开始到当前行的所有行,加上根据 ORDER BY 子句等于当前行的任何后续行

我假设这仅适用于那些仅作用于窗口框架行的窗口函数(因此上面的引用对于 ROW_NUMBER() 函数不正确)?

c) http://www.postgresql.org/docs/current/static/tutorial-window.html 谈论 PostgreSQL 8.4 的窗口函数。那篇文章中的所有内容是否也适用于 Sql Server 2008 的窗口函数

感谢

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    SQL Server 尚不支持聚合窗口函数中的 ORDER BY 子句。 http://msdn.microsoft.com/en-us/library/ms189461.aspx

    下面的查询会给你一个语法错误

    SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary
    

    row_number() 不是聚合窗口函数,因此它不仅仅作用于窗口框架的行。它作用于整个分区。只有聚合函数适用于窗口框架。并且仅当支持 ORDER BY 子句时。

    【讨论】:

    • "SQL Server 尚不支持聚合窗口函数中的 ORDER BY 子句。"但我的问题是 ROW_NUMBER 是否作用于窗框行,据我所知, ROW_NUMBER() 不是聚合窗函数
    • 我认为 NTILE 和 RANK 也作用于窗框行(我还没有介绍这些功能,但我想我已经在某处读过它们)?
    • 对窗口框架的支持似乎也仅限于其他产品中的非排名功能。但是,我还没有阅读过 ANSI 标准,所以不能确定。 publib.boulder.ibm.com/infocenter/rbhelp/v6r3/index.jsp?topic=/… MS SQL 2008 根本不支持窗口框架。 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 之类的 ANSI SQL 语法将失败。
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2012-08-27
    • 1970-01-01
    • 2015-09-20
    • 2021-08-14
    相关资源
    最近更新 更多