2016-12-19 9 views
0

Мне нужно удалить дубликаты немного сложным способом. Для выбранной строки мне нужно удалить все другие дубликаты, а для других строк мне нужно сохранить самую раннюю запись.Как удалить все другие дубликаты в диапазоне Таблицы Google

Что я имею в виду (Выбранная строка: | Steve | 10 вечера |:

  1. Удалить дубликаты Стиву записей, кроме этого одного (4 вечера & 1pm)
  2. Сортировать по времени
  3. Получить уникальные значения

Table before: 
| Steve | 10pm |  
| Mike | 8pm | 
| Steve | 4pm | 
| Joe | 6pm | 
| Mike | 3pm | 
| Steve | 1pm | 

Ex1: 
Selected: | Steve | 4pm | 
| Steve | 4pm |   
| Joe | 6pm |  
| Mike | 3pm | 

Ex2 
Selected: | Steve | 10pm | 
| Steve | 10pm | 
| Joe | 6pm | 
| Mike | 3pm | 

Ex3: 
Selected: | Steve | 1pm | 
| Joe | 6pm | 
| Mike | 3pm | 
| Steve | 1pm | 

Редактировать: 12/19/2016 12:02

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

=MATCH(B2,unique(INDEX(SORT(sort({query(B2:C, "select B, min(C) where B <> '" &B2 & "' and B <> '' group by B label min(C) ''", 0); B2:C2}, 2, false),2,1),0,1)),0) 

ответ

2

Скажем, ваши данные в колонке А: (? Как-то) B и выбранная строка имеет были скопированы в C1: D1. (Какой бы ни был ваш метод выбора, вы должны иметь возможность отображать выбранную строку где-нибудь). Тогда возможная стратегия такова:

  1. Используйте query, чтобы выбрать все не-Steves, выбрав самое раннее время для каждого.
  2. Добавить выбранные строки в результаты
  3. Отсортируйте все, что хотите.

Вот как я это сделал; запрашиваемый диапазон начинается со 2-й строки, чтобы избежать (вероятно) заголовков.

=sort({query(A2:B, "select A, min(B) where A <> '" & C1 & "' and A <> '' group by A label min(B) ''", 0); C1:D1}, 2, false) 

То же самое с переносами:

=sort({ 
    query(A2:B, 
    "select A, min(B) 
     where A <> '" & C1 & "' and A <> '' 
     group by A 
     label min(B) '' 
    ", 0); 
    C1:D1}, 
2, false) 

Так запрос выбирает имена, отличные от С1 и группы по имени выбирают самое раннее время. Он не использует метки заголовков, чтобы избежать их смешивания с сортировкой. Строка C1: D1 добавляется с использованием нотации массива {row1; row2} и, наконец, массив сортируется по второму столбцу в порядке убывания.

+0

Это reallllyyy закрыть. Проблема в; Мне нужно применить эту формулу для каждой строки ... Конечным результатом в идеале будет число. –

+0

Я понимаю, что, возможно, попросить общий вопрос было бы лучше X_x –

+0

Только что понял, как заставить его работать. Вернусь к вам в нескольких. –