行号为sql的新列

问题描述

我有如下两列的数据,我需要一个如下所示的新列的输出

输入-

Name,Date,Value  
Test1,20200901,55  
Test1,100  
Test1,150  
Test1,20200805,25  
Test1,30  

行号基于列-名称和日期中的数据

输出

Name,Value,row_number  
Test1,55,1  
Test1,100,150,25,2  
Test1,30,2  

使用分区的查询无济于事

select *,row_number() over (partition by Date) as Rank from Table

有人可以帮忙吗

非常感谢您

解决方法

使用dense_rank()-和order by子句:

select t.*,dense_rank() over (order by Date) as rn from mytable t

这为您提供了一个序列号,该序列号以1最早的值递增,date每次date更改时都没有间隔。

,

您想要dense_rank()

select *,dense_rank() over (order by Date) as Rank
from Table;

在不使用partition by的情况下使用order by时有一些可疑之处(即使基础数据库支持)。