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

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

我有一张这样的table:

  1. |Master |Sub | Date |
  2. A 123 07/11
  3. A 789 07/14
  4. A 101 07/12
  5. B 124 05/10
  6. B 567 05/16

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

  1. 1
  2. 3
  3. 2
  4. 1
  5. 2

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

cqoc49vn

cqoc49vn1#

下面是bigquery标准sql

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

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

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

g9icjywg2#

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

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

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

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

相关问题