2014-10-18 2 views
2

У меня есть две колонки TIMESTAMP в моей таблице: customer_birthday и purchase_date. Я хочу создать запрос, чтобы показать количество покупок по возрасту клиента, чтобы создать диаграмму.Как рассчитать возраст в BigQuery?

Но как рассчитать возраст, в годах, используя BigQuery? Другими словами, как мне получить разницу между годами между двумя TIMESTAMP? Расчет возраста не может быть выполнен с использованием дней или часов из-за високосных годов, поэтому функция DATEDIFF(<timestamp1>,<timestamp2>) не подходит.

Спасибо.

ответ

0

Вы можете вычислить количество дней, это было бы, если бы все годы были долгими 365 дней, возьмите разницу, и разделить на 365. Например:

SELECT (day2-day1)/365 
FROM (
    SELECT YEAR(t1) * 365 + DAYOFYEAR(t1) as day1, 
     YEAR(t2) * 365 + DAYOFYEAR(t2) as day2 
    FROM (
    SELECT TIMESTAMP('20000201') as t1, 
      TIMESTAMP('20140201') as t2)) 

Это возвращает 14.0, несмотря на то, есть промежуточные високосные годы. Если вы хотите, чтобы конечный результат был целым числом, а не с плавающей запятой, вы можете использовать функцию INTEGER() для выдачи результата.

Обратите внимание, что если одна из дат високосного дня (feb 29), она будет на один год от 1 марта, но я думаю, что это похоже на предполагаемое поведение.

+1

Я только что создал [этот выпуск] (https: // код. google.com/p/google-bigquery/issues/detail?id=170) в своем трекере проблем, чтобы запросить дополнительные функции расчета даты, включая разницу между годами между двумя датами. –