首页 > 解决方案 > SQL:获取每次值更改时都会增加的行号

问题描述

我在 Vertica 中有下表:

+----------+----------+----------+
| column_1 | column_2 | column_3 |
+----------+----------+----------+
| a        |        1 |        1 |
| a        |        2 |        1 |
| a        |        3 |        1 |
| b        |        1 |        1 |
| b        |        2 |        1 |
| b        |        3 |        1 |
| c        |        1 |        1 |
| c        |        2 |        1 |
| c        |        3 |        1 |
| c        |        1 |        2 |
| c        |        2 |        2 |
| c        |        3 |        2 |
+----------+----------+----------+

该表按 column_1 和 column_3 排序。我想添加一个行号,每次 column_1 或 column_3 更改它们的值时都会增加。它看起来像这样:

+----------+----------+----------+------------+
| column_1 | column_2 | column_3 | row_number |
+----------+----------+----------+------------+
| a        |        1 |        1 |          1 |
| a        |        2 |        1 |          1 |
| a        |        3 |        1 |          1 |
| b        |        1 |        1 |          2 |
| b        |        2 |        1 |          2 |
| b        |        3 |        1 |          2 |
| c        |        1 |        1 |          3 |
| c        |        2 |        1 |          3 |
| c        |        3 |        1 |          3 |
| c        |        1 |        2 |          4 |
| c        |        2 |        2 |          4 |
| c        |        3 |        2 |          4 |
+----------+----------+----------+------------+

我尝试使用分区,但找不到正确的语法。

标签: sqlpartitionvertica

解决方案


这也可以工作,不需要表格排序

  1. 从 column_1 和 column_3 中找到不同的值并为它们提供新索引
  2. 将前一个与 column_1 和 column_3 上的原始表合并
select t1.*, t2.row_number 
from
your_table t1
join 
(select column_1, column_2, row_number() over (partition by temp) as row_number from (select distinct column_1, column_2, 1 as temp from your_table) foo) t2
on
t1.column_1=t2.column_1 and t1.column_2=t2.column_2;

推荐阅读