说我有以下数据:
X | 2/2/2000
X | 2/3/2000
B | 2/4/2000
B | 2/10/2000
B | 2/10/2000
J | 2/11/2000
X | 3/1/2000
我想获得这样的数据集:
1 | X | 2/2/2000
1 | X | 2/3/2000
2 | B | 2/4/2000
2 | B | 2/10/2000
2 | B | 2/10/2000
3 | J | 2/11/2000
4 | X | 3/1/2000
到目前为止,我所尝试的所有内容都要么最后编号,每次更改都会重置每个字段值更改的计数,或者在示例中将最后一个X保留为1。
答案 0 :(得分:0)
这是一个空白和岛屿问题。您可以使用行号的差异:
select dense_rank() over (order by col1, seqnum_1 - seqnum_2) as col0,
col1, col2
from (select t.*,
row_number() over (order by col2) as seqnum_1,
row_number() over (partition by col1 order by col2) as seqnum_2
from t
) t;
解释为什么这个工作有点麻烦。如果运行子查询,您将看到如何分配序列号以及为什么差异是您想要的。
答案 1 :(得分:0)
您可以这样查询:
SELECT dense_rank() over(order by yourcolumn1), * from yourtable