sql - 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 |
+----------+----------+----------+------------+
我尝试使用分区,但找不到正确的语法。
解决方案
这也可以工作,不需要表格排序
- 从 column_1 和 column_3 中找到不同的值并为它们提供新索引
- 将前一个与 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;
推荐阅读
- android - 根据条件隐藏 Listview 行中的 textview
- python - Python Pandas 查找数据框中存在的多个列标题
- linux - makefile:在每个接收者中重新分配变量以存储步骤名称
- android - 如何在 Android Oreo + 中以编程方式获取 WiFi 热点状态
- c++ - QtCreator 调试器:进入 std::function
- sql - 更大的主表甚至更大的权限表的有效连接技术
- ios - 如何在堆栈中将超过 1 个视图控制器委托给视图控制器?
- ios - Apple Pay In App Provisioning:LinkAndProvisionResponse API
- ms-access - 如何从多行中查找帖子的分手日期
- python - 在列表列表中出现错误:TypeError:'int' object is not iterable