Выберите диапазон в метках времени и создайте новый столбец, содержащий соответствующий большой запрос сезона года - PullRequest
0 голосов
/ 13 июля 2020

Я хочу выбрать диапазон между двумя метками времени из столбца DateTime, создать новый столбец CropYear и применить 2019 для первого выбранного диапазона и 2020 для второго.

Желаемый результат:

DateTime                  CropYear

'2018-11-16 00:00:00'       2019
...                         2019
'2019-10-14 23:59:59'       2019
'2019-10-15 00:00:00'       2020
...                         2020
*CURRENT_TIMESTAMP()*       2020

Я попытался выполнить этот запрос, но похоже, что CASE не поддерживает отметки времени:

select SerialNumber, DateTime,
case DateTime
when DateTime BETWEEN '2018-11-16 00:00:01' AND '2019-10-14 23:59:59' then 2019
when DateTime BETWEEN '2019-10-15 00:00:00' AND CURRENT_TIMESTAMP() then 2020
else "error"
end
as CropYear
from `xx.yyy`

1 Ответ

1 голос
/ 13 июля 2020

Как насчет того, чтобы просто извлечь функцию года со смещением?

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 (в основном, по лондонскому времени). Я предполагаю, что вас больше волнует конкретный часовой пояс. Если проблема связана с часовыми поясами, задайте новый вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...