SQL server PARTITION BY 是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server PARTITION BY 是啥意思相关的知识,希望对你有一定的参考价值。

参考技术A partiton
by
在很多语法中都有用到。根本一点就是分区
例如select
name
,row_number()over(partition
by
year
,montn
order
by
year,month)
from
psss
参考技术B 很高兴为你解答,
相信group
by你一定用过吧,
先对比说下
partition
by关键字是oracle中分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition
by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它有一部分函数既是聚合函数也是分析函数,比如avg、max,也有一部分是特有的,比如first、rank,除了order
by子句外,分析函数在一个查询中优先级最低

在 sql server 中选择 distinct 和 partition by

【中文标题】在 sql server 中选择 distinct 和 partition by【英文标题】:select distinct and partition by in sql server 【发布时间】:2015-10-13 10:29:04 【问题描述】:

myTable 如下所示:

id    rDate   r     rName
1     41086   0.2   ax_ax03_a 
1     41086   0.2   ax_ax03_a 
1     41086   0.2   ax_ax03_a
1     41087   0.4   ax_ax03_a
1     41087   0.4   ax_ax03_a
2     41086   0.12  ax_ax06_a
2     41086   0.12  ax_ax06_a
2     41086   0.12  ax_ax06_a
2     41087   0.5   ax_ax06_a
2     41087   0.34  ax_ax06_a

等等

对于每个 id,我都有一组日期(需要使用 cast(rDate as DATETIME)、值 (r) 和名称进行转换。 我需要消除同时具有相同 id, rDate, r, rName 的所有输入项(重复项)。 我在想一些事情:

select  id,CAST(rDate AS DATETIME) over (partition by rName, id) as rDateNew, rName  from myTable

使用 sql server 2012

【问题讨论】:

select distinct * from mytable 将选择不同的值。您是要选择不同的行还是删除重复的行? select distinct id,CAST(rDate AS DATETIME) over (partition by rName, id) as rDateNew, rName from myTable 我认为您可以使用GROUP BY消除重复项 有什么独特之处吗? (例如自动编号的 id) 行中没有独特的东西。对于相同的 id,有多个日期和值。然而,一个 id 对应于名称 【参考方案1】:

您不需要在您的情况下使用over 子句,DISTINCT 将消除您表中的所有重复项:

SELECT DISTINCT id, rDate, r, rName 
FROM Tablename

但是,如果您需要根据每个重复组中的特定列过滤这些重复项,例如,如果您需要选择具有最近日期的行,在这种情况下您应该使用OVER 子句:

WITH Ranked
AS
(
   SELECT CAST(rDate AS DATETIME) AS Date,
     ROW_NUMBER() OVER(PARTITION BY rName, id 
                       ORDER BY CAST(rDate AS DATETIME) DESC) AS RN,
     r, rName
   FROM Tablename
)
SELECT * 
FROM Ranked 
WHERE rn = 1;

这将消除重复并为您提供最新日期的行。

请注意,您不能将CAST(rDate AS DATETIME)over (partition by rName, id) 一起使用,这是无效的,您必须使用ranking function 而不是CAST

【讨论】:

我需要从 r 和每个 id 的日期中删除值(每个 id 在 rName 中都有一个对应的代码,并且 rName 和 id 的这个组组合具有一段时间的值时间,在我的情况下大约 5 年)。 SELECT DISTINCT id, rDate, r, rName FROM Tablename 会同时产生具有相同 id、rDate、r、rName 的行,还是只删除每列上的重复项?我同时需要 @CM2K - 它会同时为您提供不同的值跨越所有四列 这很有帮助,今天学到了一些东西。谢谢你的例子,我很快就会需要它!祝你有美好的一天,继续努力! @CM2K - 随时欢迎您。很高兴它对你很有帮助,你也有美好的一天:)

以上是关于SQL server PARTITION BY 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

SQL server PARTITION BY 是啥意思

SQL Server:循环遍历每个(PARTITION BY ...)元素的过程或函数

在 sql server 中选择 distinct 和 partition by

Sql Server Max() over partition by - 翻译成 MySql

SQL Server数据库partition by 与ROW_NUMBER()函数使用详解 (转载)

【SQL】partition by