Текущая сумма BigQuery

У меня есть набор данных в BigQuery, в котором записываются пожертвования, сделанные отдельным лицам в преддверии мероприятия. Вот схема

  • first_name: STRING --- (это имя донора)
  • payment_date: TIMESTAMP --- (дата пожертвования)
  • сумма: STRING --- (сумма пожертвования)
  • donated_to_individual: STRING --- (участник собирает пожертвование)
  • location: string --- (место проведения мероприятия, в котором будет участвовать человек)
  • year_of_run: STRING --- (год события)

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

Моя лучшая попытка, приведенная ниже, оставила меня с таблицей, в которой можно было подсчитать количество людей, которые собрали 50 долларов или больше, ТОЛЬКО если они получили пожертвование ТОЛЬКО в тот день:

SELECT
donated_to_id_b
,payment_date
,amount
,running_total
,IF(running_total>=50,'$50','NOPE') as reached_50_dollars

FROM
(SELECT
donated_to_individual as donated_to_id_b
,payment_date as payment_date
,amount
,sum(amount) OVER (PARTITION BY donated_to_id_b ORDER BY payment_date ASC, first_name) as running_total

FROM [robotic-charmer-726:bl_test_data.running_count_over_50_then_150]
WHERE year_of_run='2014')

Боюсь, я использую совершенно неправильный подход ... так что любая помощь будет ОЧЕНЬ благодарна!

Я создал общедоступный фиктивный набор данных, который можно найти здесь: bigquery.cloud.google.com/table/robotic-charmer-726:bl_test_data.running_count_over_50_then_150

Спасибо!


person Ben Leathers    schedule 03.02.2015    source источник


Ответы (1)


Я думаю, что общий подход хорош - аналитические функции (например, предложение OVER) - это правильный механизм в SQL для работы с текущей суммой. Единственное, что меня немного беспокоило в вашем SQL, это то, что вы переименовали столбец donated_to_indivudual внутри SELECT и использовали переименованный псевдоним внутри PARTITION BY. Хотя предложение OVER оценивается в последнюю очередь, для удобства чтения (и переносимости) было бы лучше не полагаться на переносимые псевдонимы.

person Mosha Pasumansky    schedule 03.02.2015