Есть ли способ получить NTH_VALUE с переменной N? (SQL - BigQuery) - PullRequest
0 голосов
/ 06 января 2020

С таблицей Bigquery как таковой:

{"name": "parent_id", "type": "STRING", "mode": "REQUIRED"},
{"name": "parent_x", "type": "INTEGER", "mode": "REQUIRED"},
{"name": "thing_id", "type": "STRING", "mode": "REQUIRED"},
{"name": "created_at", "type": "TIMESTAMP", "mode": "NULLABLE"}

Предполагая, что у нас есть одна строка на "thing_id" со связанным "made_at"

Я пытаюсь получить для каждого родителя id, Nth «create_at», где Nth «thing_id» зарегистрировано в моей таблице.

Я могу использовать NTH_VALUE (), но я хочу, чтобы мой N был переменной на основе parent_x, точнее, я хочу MIN ( "буквальное целое число", parent_x) должно быть N. Проблема в том, что NTH_VALUE () принимает только литерал или параметр запроса.

Как мне обойти это?

Таблица результатов I ' ищу это:

{"name": "parent_id", "type": "STRING", "mode": "REQUIRED"},
{"name": "nth_created_at", "type": "TIMESTAMP", "mode": "NULLABLE"}

Ответы [ 2 ]

1 голос
/ 06 января 2020

Вы можете использовать row_number() и окно min() следующим образом:

select parent_id, created_at nth_created_at
from (
    select 
        t.*,
        row_number() over(partition by parent_id order by created_at) rn,
        min(parent_x) over(partition by parent_id) tn
    from mytable t
) t
where rn = tn
0 голосов
/ 06 января 2020

Самый простой метод, вероятно, row_number():

select t.* except (seqnum)
from (select t.*, row_number() over (partition by parent_x order by timestamp) as seqnum
      from t
     ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...