2015-02-17 5 views
2

У меня есть вложенная повторяющаяся структура, повторяющаяся структура переменной длины. Например, это может быть объект человека с повторяющейся структурой, в которой хранятся города, в которых проживал человек. Я хотел бы найти последний элемент в этом списке, чтобы найти, что текущий город живет. Есть ли простой способ сделать это, я попытался оглядеть функции jsonpath, но я не уверен, как использовать его с «внутри». Любая помощь, пожалуйста?Как найти последний элемент в повторяющейся структуре в bigquery

ответ

7

1) Вы можете использовать LAST и WITHIN

SELECT 
    FIRST(cell.value) within record , 
    LAST(cell.value) within record 
FROM [publicdata:samples.trigrams] 
where ngram = "! ! That" 

2), или если вы хотите что-то более продвинутые вы можете использовать POSITION

POSITION(field) - возвращает один основе, последовательное положение поле внутри набора повторяющихся полей.

Вы можете проверить образцы из триграмм (нажмите на детали, чтобы увидеть unflatten схемы) https://bigquery.cloud.google.com/table/publicdata:samples.trigrams?pli=1

enter image description here

И при запуске ПОЗИЦИИ, вы получите порядок этой области.

SELECT 
    ngram, 
    cell.value, 
    position(cell.volume_count) as pos, 
FROM [publicdata:samples.trigrams] 
where ngram = "! ! That" 

enter image description here

Теперь, когда вы имеете позицию, вы можете запросить последнего.

+0

Это замечательно - возможно ли иметь первый элемент и последний элемент в одном предложении SELECT? – opensourcegeek

+0

да, вы можете иметь это, или вы можете использовать подзапрос каждый раз – Pentium10

+0

Вы имеете в виду подзапрос для fetching первого и другого подзапроса для извлечения последних элементов? – opensourcegeek