我有一个包含许多列的表。
some_integer_1, some_integer_2, some_date, other
123 9 2019-01-01 "Some text"
123 9 2019-01-01 "Other text"
123 5 2019-02-01 "Hello"
56 3 2019-03-01 "World"
我想创建一个新表,将前三列映射到一个唯一的整数。因此,如果前三列相同,则唯一整数将相同:
some_integer_1 some_integer_2 some_date unique_integer
123 9 2019-01-01 1
123 5 2019-02-01 2
56 3 2019-03-01 3
如果我有另一个使用 Netezza SQL 包含更多数据的表,则创建此表然后追加到该表的最有效方法是什么?
您可以使用dense_rank()
来分配值:
select t.*,
dense_rank() over (order by some_integer_1, some_integer_2, some_date) as unique_integer
from t;
我强烈建议您不要尝试将此类列添加到此表中。 前三列似乎表示某种实体。 也许是跑步或类似的东西。
您应该为此实体提供一个单独的表。 可以为此表分配一个键,如果您愿意,可以使用序列分配该键。 然后,前三列应替换为对此新表的外键引用。