select 在 sql 服务器中区分和分区
select distinct and partition by in sql server
我的表格看起来像这样:
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 服务器 2012
您不需要在您的案例中使用 over
子句,DISTINCT
将消除您的 table:
中的所有重复项
SELECT DISTINCT id, rDate, r, rName
FROM Tablename
但是,如果您需要根据每个重复组中的特定列过滤这些重复项,例如,如果您需要 select 最近日期的行,在这种情况下您应该使用 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
。
我的表格看起来像这样:
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 服务器 2012
您不需要在您的案例中使用 over
子句,DISTINCT
将消除您的 table:
SELECT DISTINCT id, rDate, r, rName
FROM Tablename
但是,如果您需要根据每个重复组中的特定列过滤这些重复项,例如,如果您需要 select 最近日期的行,在这种情况下您应该使用 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
。