如何在 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
如何在 BigQuery 的标准 SQL 中解析具有不同日期字符串的列中的值