Как я могу пронумеровать вспомогательные идентификаторы, связанные с основным идентификатором, упорядоченные по дате в BigQuery SQL? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть таблица, которая выглядит следующим образом:

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

Я хочу пронумеровать Sub ID, принадлежащие каждому Master ID, упорядоченные по дате. Таким образом, идеальный столбец вывода будет выглядеть следующим образом:

1
3
2
1
2

Я использую BigQuery SQL, поэтому стандартный SQL будет предпочтительнее в качестве ответа. Каждая дата уникальна.

РЕДАКТИРОВАТЬ: каждый дополнительный идентификатор не обязательно уникален!

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Ниже приведено для BigQuery Standard 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    
0 голосов
/ 13 июля 2020

Для этого можно использовать 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
...