如何在 BigQuery SQL 中为与按日期排序的主 ID 关联的子 ID 编号?

Posted

技术标签:

【中文标题】如何在 BigQuery SQL 中为与按日期排序的主 ID 关联的子 ID 编号?【英文标题】:How can I number Sub-IDs associated with a Master ID ordered by date in BigQuery SQL? 【发布时间】:2020-07-13 20:18:46 【问题描述】:

我有一张如下所示的表格:

|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

我使用的是 BigQuery SQL,因此首选标准 SQL 作为答案。每个日期都是独一无二的。

编辑:每个子 ID 不一定是唯一的!

【问题讨论】:

【参考方案1】:

以下是 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    

【讨论】:

【参考方案2】:

您可以为此使用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

【讨论】:

以上是关于如何在 BigQuery SQL 中为与按日期排序的主 ID 关联的子 ID 编号?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 提取昨天的数据,其中日期在表名中为 filename20181203

Big Query 追加新行

如何在 BigQuery 的标准 SQL 中解析具有不同日期字符串的列中的值

BigQuery - 如何比较“日期”列(使用旧版 SQL)?

在 BigQuery/SQL 中测试交易条目

如何在 Azure 数据工厂中为与外键相关的表创建管道并执行复制活动?