Как насчет того, чтобы просто извлечь функцию года со смещением?
with t as(
select timestamp('2018-11-16 00:00:00') as dt union all
select timestamp('2019-10-14 23:59:59') union all
select timestamp('2019-10-14 00:00:00') union all
select timestamp('2019-10-15 00:00:00') union all
select timestamp('2019-10-16 00:00:00') union all
select current_timestamp
)
select t.*,
extract(year from timestamp_add(dt, interval 78 day)
) as crop_year
from t;
Это устраняет необходимость в выражении case
.
«78» дней - это маг c количество дней. Добавьте его к 15 октября, и вы получите 1 января - следующего года.
Одно примечание - которое не имеет прямого отношения к вопросу - нужно быть осторожным. TIMESTAMP
в BigQuery находится в UT C (в основном, по лондонскому времени). Я предполагаю, что вас больше волнует конкретный часовой пояс. Если проблема связана с часовыми поясами, задайте новый вопрос.