适当的排名
Appropriate ranking
我有这样的数据:
contract nr startdate
1 12 01-01-2000
1 12 03-01-2000
1 22 07-01-2000
2 77 12-04-2001
2 78 17-04-2001
我这里的简单目标是对特定合同中的每个数字进行排名,同时考虑开始日期。输出应如下所示:
contract nr startdate my_rank
1 12 01-01-2000 1
1 12 03-01-2000 1
1 22 07-01-2000 2
2 77 12-04-2001 1
2 78 17-04-2001 2
几乎所有可能的组合我都试过了,还是想不通。
select dense_rank() over
(partition by contract order by nr) as my_rank,* from my_data
上面已经足够接近了,问题是在某些情况下,1 被分配给最近的合同,在其他情况下,它被分配给最近的合同 (?)。
有什么提示吗?
您的排名是nr
。
如果您想按合同日期排名,则需要将其合并。但是这些在合同上是不同的。所以,这需要额外的计算:
select dense_rank() over (partition by contract order by min_startdate) as my_rank,
d.*
from (select d.*,
min(startdate) over (partition by contract, nr) as min_startdate
from my_data d
) d;
我不知道您想要 min()
还是 max()
的订购开始日期。
我有这样的数据:
contract nr startdate
1 12 01-01-2000
1 12 03-01-2000
1 22 07-01-2000
2 77 12-04-2001
2 78 17-04-2001
我这里的简单目标是对特定合同中的每个数字进行排名,同时考虑开始日期。输出应如下所示:
contract nr startdate my_rank
1 12 01-01-2000 1
1 12 03-01-2000 1
1 22 07-01-2000 2
2 77 12-04-2001 1
2 78 17-04-2001 2
几乎所有可能的组合我都试过了,还是想不通。
select dense_rank() over
(partition by contract order by nr) as my_rank,* from my_data
上面已经足够接近了,问题是在某些情况下,1 被分配给最近的合同,在其他情况下,它被分配给最近的合同 (?)。 有什么提示吗?
您的排名是nr
。
如果您想按合同日期排名,则需要将其合并。但是这些在合同上是不同的。所以,这需要额外的计算:
select dense_rank() over (partition by contract order by min_startdate) as my_rank,
d.*
from (select d.*,
min(startdate) over (partition by contract, nr) as min_startdate
from my_data d
) d;
我不知道您想要 min()
还是 max()
的订购开始日期。