如何在bigquerysql中对与按日期排序的主id相关联的子id进行编号?

vqlkdk9b  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(330)

我有一张这样的table:

|Master |Sub | Date |
 A       123   07/11
 A       789   07/14
 A       101   07/12
 B       124   05/10
 B       567   05/16

我想编号的子id属于每个主id按日期排序。因此理想的输出列如下所示:

1
3
2
1
2

我使用的是bigquerysql,所以首选标准sql作为答案。每个日期都是唯一的。
编辑:每个子id不一定是唯一的!

cqoc49vn

cqoc49vn1#

下面是bigquery标准sql


# standardSQL

SELECT *, COUNT(1) OVER(PARTITION BY master ORDER BY day) sub_id
FROM `project.dataset.table`

如果要应用于问题的样本数据,则输出为

Row master  sub day     sub_id   
1   A       123 07/11   1    
2   A       101 07/12   2    
3   A       789 07/14   3    
4   B       124 05/10   1    
5   B       567 05/16   2
g9icjywg

g9icjywg2#

你可以用 ROW_NUMBER() 或者 RANK() 为此:

select t.*, ROW_NUMBER() OVER (PARTITION BY master ORDER BY day) 
from t;

两者的区别 ROW_NUMBER() 以及 RANK() 是如何处理关系的。您可以考虑以下情况:

|Master |Sub | Date |  ROW_NUMBER  |   RANK  |  COUNT
 A       123   07/11       1             1        2       
 A       789   07/11       2             1        2
 A       101   07/14       3             3        3

相关问题