Группа запросов Google Sheets By / First-N-Per-Group - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь найти простое решение для first-n-per-group .

У меня есть таблица данных, даты первого столбца и остальные данные. Я хочу группировать на основе даты, так как допускается несколько записей на дату. Для второго столбца несколько чисел, но нужна запись FIRST .

В настоящее время я могу использовать агрегатную функцию MIN (), но она будет возвращать самое низкое значение, а не первое.

A            B
01/01/2018   10
01/01/2018   15
02/01/2018   10
02/01/2018   2
02/01/2018   100
02/01/2018   20
03/01/2018   5
03/01/2018   2

Желаемый вывод

A            B
01/01/2018   10
02/01/2018   10
03/01/2018   5

Текущие результаты с использованием MIN () - нежелательно

A            B
01/01/2018   10
02/01/2018   2
03/01/2018   2

Жаль, что в Google Sheets нет агрегатной функции FIRST (), которая бы упростила это.

Я видел пару примеров использования Row Number и ArrayQuery, но это, похоже, не работает для меня. Существует около 5000 строк данных, поэтому мы стремимся обеспечить максимальную эффективность, и при этом не нужно пересчитывать весь лист при любых изменениях, каждая из которых занимает несколько секунд.

В настоящее время у меня есть это, которое добавляет третий столбец с номером строки:

=query({A1:B, arrayformula(row(A1:B))}, "select min(Col1),min(Col2) group by Col1")

Спасибо


РЕДАКТИРОВАТЬ 1


Предлагаемое решение было =SORTN(A:B,2^99,2,1,1), которое является простым и простым. Однако для этого требуется большой диапазон «свободного пространства» для отображения возвращенного набора данных. Представьте себе 3000+ строк.

Я надеялся на решение, основанное на QUERY(), так как я хотел сделать дальнейшие операции с результатами. В частности, подсчитайте вхождения различных значений.

Например: я хотел вернуть набор данных

A            B
01/01/2018   10
02/01/2018   10
03/01/2018   5

И все же я хочу посчитать вхождения этих значений (а затем игнорировать даты). Например:

B    C
10   2
5    1

Возможно, я запутал ситуацию, используя цифры? «данные» в ColB - это TEXT (короткие 3-буквенные коды), однако я использовал цифры, чтобы показать, что не могу использовать функцию MIN (), поскольку она возвращает наименьшее числовое значение.

Итак, вкратце:

  • Пройти все строки (более 3000 строк) и сгруппировать по ПЕРВОЙ строке определенной даты
  • возвращает ПЕРВОЕ значение этой строки
  • COUNT () все уникальные вхождения этих первых значений, независимо от даты. Просто список с уникальными значениями и их количеством (опять же, только первый в любой конкретный день)

1 Ответ

0 голосов
/ 09 сентября 2018
=SORTN(A:B,2^99,2,1,1)

Если ваши данные отсортированы, как в примере, вы можете легко удалить дубликаты с помощью SORTN ()

...