我在 Teradata 中有一张表。它有 5 列 A,B,C,D,E 。C 是唯一列,它是 numeric 。我需要通过删除在 C 列中具有最小值的重复记录来清理此表。示例如下
例子
A B C D E
100 ABC 1 23 24
200 XYZ 4 31 45
100 ABC 3 23 24
300 LMN 6 25 26
200 XYZ 7 31 45
预期输出
A B C D E
100 ABC 3 23 24
200 XYZ 7 31 45
300 LMN 6 25 26
使用 QUALIFY 语句,它允许您使用窗口函数过滤查询的结果集:
SELECT *
FROM yourtable
QUALIFY ROW_NUMBER() OVER (PARTITION BY A ORDER BY C DESC) = 1;
这里的窗口函数在每组不同的A
字段上放置一个 row_number(1 到 N),从最高的 C 开始,ORDER BY C DESC
然后只选择获得1
.
对于其他 RDBMS(以及 Teradata),您可以使用相关子查询:
SELECT *
FROM yourtable t1
WHERE c = (SELECT max(c) FROM yourtable WHERE t1.a = a);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句