Как мне сделать эту разницу с месяцами, используя стандартный SQL (BigQuery)

У меня есть следующий запрос:

#standardSQL
SELECT distinct  (grand_total/months) AS avg, ((grand_total/days)) AS 
avg_day
FROM 
(select count(searchint.id) as Total, (DATE_DIFF(DATE ({{DATE_END}}), 
DATE ({{DATE_START}}), DAY)+1) AS days, ((12 * YEAR(TIMESTAMP({{DATE_END}})) + 
MONTH(TIMESTAMP({{DATE_END}}))) - (12 * YEAR(TIMESTAMP({{DATE_START}})) 
+ MONTH(TIMESTAMP({{DATE_START}}))) +1) AS months,
(select count(searchint.id) as Total
from `dbsearch`
where  cast(replace(searchint.createdDate,'Z','')as DateTime) >= 
cast({{DATE_START}} as DateTime)
and  cast(replace(searchint.createdDate,'Z','')as DateTime) <= 
cast(DATE_ADD(cast({{DATE_END}} as date),  Interval 1 day ) as DateTime)) AS grand_total
    from `dbsearch`
where  cast(replace(searchint.createdDate,'Z','')as DateTime) >= 
cast({{DATE_START}} as DateTime)
and  cast(replace(searchint.createdDate,'Z','')as DateTime) <= 
cast(DATE_ADD(cast({{DATE_END}} as date),  Interval 1 day ) as DateTime)
group by date(cast(replace(searchint.createdDate,'Z','')as DateTime))
ORDER BY 2 DESC) AS groupby

Однако, когда я пытаюсь запустить BigQuery, выдает следующую ошибку:

Функция не найдена: ГОД в [5:180]

Я понимаю, что это потому, что я использую стандартный SQL, но как мне сделать это по сравнению с месяцами, использующими стандартный SQL?


person Layla Comparin    schedule 20.07.2018    source источник


Ответы (2)


Чтобы найти разницу в месяцах между двумя датами, лучше использовать DATE_DIFF()

DATE_DIFF(DATE_END, DATE_START, MONTH)
person Mikhail Berlyant    schedule 20.07.2018

StandardSQL в BigQuery поддерживает стандартную функцию ISO/ANSI для извлечения частей даты. Это extract():

Вы хотите:

extract(year from <datecol>)
extract(month from <datecol>)

Это объясняется в документации.

person Gordon Linoff    schedule 20.07.2018