2014-10-28 2 views
1

Пример базы данных: [Сохраненные в Google таблицу]Запросы Google Spreadsheet: как получить первую запись каждой группы? не

  • Timestamp ======= | = Contact Нет = | = Билл ======= |
  • ================= =======================================================================================================
  • 11/7/2012 2:46:29 | 9332261982 | 13.0305472 |
  • 15/6/2012 2:46:29 | 9332261982 | 14.0305472 |
  • 22/5/2012 2:46:29 | 9332261982 | 16.0305472 |
  • 11/4/2012 2:46:29 | 9332261982 | 20.0305472 |
  • 15/7/2012 2:46:29 | 9916901970 | 13.0305472 |
  • 1/6/2014 2:46:29 | 9916901970 | 14.0305472 |
  • 05/12/2012 2:46:29 | 9916901970 | 16.0305472 |
  • 20/4/2012 2:46:29 | 9916901970 | 20.0305472 |

мне нужно:

  • Timestamp ======= | = Contact Нет = | = Билл ======= |
  • =============== ============================================================================================================
  • 11/7/2012 2:46:29 | 9332261982 | 13.0305472 |
  • 15/7/2012 2:46:29 | 9916901970 | 13.0305472 |

Так что у меня 3 колонки Отметка времени (Column - A), Контактный телефон (колонка - B) и Билл сумма (Column - C) в электронной таблице Google. Мне нужен большой запрос (или запрос, который я могу использовать с Google Spreadsheet), который может принести мне самую последнюю сумму счета по метке времени для каждого контакта, если я передаю этот контакт в запросе (в качестве предложения where - как там, где B содержит XXX или B содержит YYY).

До сих пор, проверяя другие переполнения ссылки стеки и поиск Google я придумал что-то вроде этого:

select * where B contains 9332261982 order by A DESC LIMIT 1 OFFSET 0 

или

select A,B,C where B contains 9332261982 or B contains 9916901970 order by A DESC 

Так как маржа это и получить запрос я хочу ?

+0

Вы используете BigQuery продукт, или вы используете Google Таблицы? Не ясно. –

+0

Я использую Google Spreadsheets и связанные с ним запросы. Это похоже на большой запрос, но не такой гибкий. – S4nd33p

ответ

1

В BigQuery я хотел бы сделать что-то вроде:

Select A,B,C FROM 
(Select * 
, Row_Number() Over(Partition By B Order by A Desc) as RNB 
From yourtable) 
Where RNB=1 

Альтернативой (если у вас нет окна функции) будут использовать некоторые строки манипуляции и макс.

  1. создать столбец D путем конкатенации столбца даты с колонкой значения (A_C), так что вы получите что-то вроде: 2014-10-29 23: 15: 2__000(обратите внимание на отступы 0, так что в результате строка будет иметь одинаковую длину)
  2. запустить простой агрегат выбора B, MAX (D) E от ...
  3. Подстрока новый столбец E.

Надеется, что это помогает

+0

Спасибо за ответ Н.Н. Я попробовал. Таким образом, sql ломается, когда я пытаюсь добавить его в URL-адрес электронной таблицы Google. Например: [ссылка] (https://docs.google.com/spreadsheets/d/ <Мой ключ таблицы>/gviz/TQ tqx = вне: HTML & заголовки = 1 & GID = 917911740 & TQ = выберите *, где B содержит 9916901970) Это возвращает мне таблицу данных. Но когда я пытаюсь выполнить запрос выше, он просто сходит с ума. – S4nd33p

+0

Для получения дополнительной информации я пытаюсь использовать синтаксис запроса, описанный здесь. [Link] (https://developers.google.com/chart/interactive/docs/querylanguage) – S4nd33p

+0

см. Мои правки для альтернативного решения –

Смежные вопросы