Arhn - архитектура программирования

получить первый или последний элемент в совокупности при выполнении GROUP BY

Я наткнулся на следующую старую дискуссию в группах Google о возможности выбора первого / последнего значения в совокупности:

https://groups.google.com/forum/?fromgroups=#!msg/bigquery-discuss/1WAJw1UC73w/_RbUCsMIvQ4J

Мне было интересно, актуален ли данный ответ. В частности, возможно ли, не выполняя JOIN или используя вложенные записи, сделать что-то вроде:
SELECT foo, LAST (bar) last_bar FROM table GROUP BY foo HAVING last_bar = b
что для следующей таблицы:

foo, bar  
1, a  
1, b  
2, b  
2, c  
3, b

вернется:

foo, last_bar  
1, b  
3, b 

Если это невозможно, я думал о том, чтобы сделать то же самое с комбинацией

GROUP_CONCAT и REGEXP_MATCH в конце конкатенации:

SELECT foo, GROUP_CONCAT(bar) concat_bar from table GROUP BY foo HAVING REGEXP_MATCH(concat_bar, "b$")  

но это работает только в том случае, если агрегирование выполняется в порядке строк. Так ли это на самом деле?

09.10.2012

Ответы:


1

Я пытался решить аналогичную проблему и пришел к такому же выводу с помощью GROUP_CONCAT

Попробуйте:

SELECT foo, REGEXP_REPLACE(group_concat(bar),".*,","") as last_bar 
FROM [dataset.table] 
GROUP BY foo
10.10.2012
  • Это действительно похоже на то, что было предложено выше. При этом он также работает только в том случае, если агрегирование выполняется по порядку. Так ли это на самом деле? 11.10.2012
  • До сих пор это был мой опыт с тестами, которые я проводил, но я не уверен. 12.10.2012

  • 2

    Мне нравится использовать агрегацию массивов для получения первых / последних значений:

    SELECT foo, ARRAY_AGG(bar)[OFFSET(0)] AS bar FROM test GROUP BY foo;
    

    Вы также можете добавить LIMIT к агрегации: ARRAY_AGG(bar LIMIT 1), чтобы ускорить его.

    Он позволяет вам использовать ORDER BY, если вы хотите отсортировать его по столбцу или вместо этого получить последнее значение: ARRAY_AGG(bar ORDER BY foo DESC)

    Также вы можете отфильтровать нулевые значения с помощью ARRAY_AGG(bar IGNORE NULLS)

    18.01.2020

    3

    Нет никакой гарантии упорядочивания записей, хранящихся в BigQuery, поэтому в какой-то момент это, скорее всего, не удастся. Всегда ли «последняя запись» будет самой большой? Если да, то, возможно, вы ищете следующее?

    SELECT foo, MAX(bar) FROM test GROUP BY foo
    
    18.10.2012
  • Как добраться до Франции: нет никакой гарантии, что поворот налево с подъездной дорожки приведет вас во Францию, но если это произойдет, возможно, попробуйте повернуть налево с подъездной дорожки? 15.08.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..