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,我有一组日期(需要使用强制转换(rDate作为DATETIME),值(r)和名称进行转换。 我需要消除同时具有相同id,rDate,r,rName的所有enteries(重复)。 我正在思考以下几点:
select id,CAST(rDate AS DATETIME) over (partition by rName, id) as rDateNew, rName from myTable
使用sql server 2012
答案 0 :(得分:2)
在您的案例中,您不需要使用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)
无法使用CAST
这是无效的,您必须使用ranking function代替dash
。