在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中使用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...