如何解决在SQL Teradata中屏蔽敏感数据
亲爱的
请有一列带有下面的SerialID的列,我需要使用SQL查询将其屏蔽
|SerialID |
|--------------------|
|00027083691581342079|
|00027139741580324755|
|00027016011583677218|
|00027016011583677218|
|00027139061577873262|
|00027056351580383150|
|00027143131580371648|
|00027143131580371648|
|00027143131580371648|
|00027147651583526704|
成为如下所示的输出
|SerialID |NewID|
|--------------------|-----|
|00027083691581342079|1 |
|00027139741580324755|2 |
|00027016011583677218|3 |
|00027016011583677218|3 |
|00027139061577873262|4 |
|00027056351580383150|5 |
|00027143131580371648|6 |
|00027143131580371648|6 |
|00027143131580371648|6 |
|00027147651583526704|7 |
解决方法
您可以使用dense_rank()
:
select serialid,dense_rank() over (order by serialid) as newid
from t;
编辑:
我曾在一些并行系统上体验过以下内容:
select t.*,newid
from t join
(select serialid,row_number() over (order by serialid) as newid
from t
group by serialid
) tt
on t.serialid = tt.serialid;
某些数据库需要对单个节点上的所有数据进行排序,因为没有使用partition by
的{{1}}。聚合查询减少了数据量,因此可以显着提高性能-但我不确定该技巧是否可以在Teradata中使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。