在禁用分区功能的 SQL 中使用分区上的 Row_number

Posted

技术标签:

【中文标题】在禁用分区功能的 SQL 中使用分区上的 Row_number【英文标题】:Using Row_number over partition by in SQL with Partitioning Feature Disabled 【发布时间】:2013-06-19 16:17:28 【问题描述】:

我想使用ROW_NUMBER() OVER (PARTITION BY SOME_COLUMN_NAME Order By SOME_COLUMN_NAME) 在选择 SQL。

我同时使用 SQLServer 和 Oracle 数据库。

这是否需要在数据库上启用“分区功能”?

更新:- 我正在使用多个版本:SQL Server 2005、SQL Server 2008 R2、Oracle 11g

【问题讨论】:

您是否尝试在您的选择中使用row_number()?它奏效了吗?你收到错误了吗? 对于 SQL Server:不!甚至没有这样的选项可以配置。即使对于 Oracle,我也不认为它的“分区功能”与 ROW_NUMBER @bluefeet 目前它在我的本地完美运行,但我不确定我的客户端数据库是否启用了分区功能。 @harrybvp 在 Oracle 中有一个叫做 Partitioning feature 的东西可以被禁用或启用,但它与 ROW_NUMBER() OVER (PARTITION BY) 无关 @Nenand 肯定有 - OP 只是混淆了 PARTITION BY 和表分区,这当然是非常不同的事情。 【参考方案1】:

“Partitioning Feature”与OLAP函数完全不同。

所以,答案是“是”,您可以在禁用分区功能的情况下使用“Row_Number”。

【讨论】:

正确:“PARTITION BY Divides the query result set into partitions.” 正确的 (ANSI SQL) 术语是“窗口函数”而不是“OLAP 函数”(OLAP 函数是 Microsoft 术语,分析函数是 Oracle 术语)。

以上是关于在禁用分区功能的 SQL 中使用分区上的 Row_number的主要内容,如果未能解决你的问题,请参考以下文章

分区上的递归 CTE 或 ROW_NUMBER?

SQL Server:row_number 分区不重置计数器

ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)

带分区的 SQL Row_Count 函数

sql 在 spark sql 数据帧查询中使用分区

BigQuery 在时间分区表上的缓存如何工作?