# #sql #google-bigquery
Вопрос:
Можем ли мы свести это большое утверждение к минимуму в упрощенном виде.
case
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 1 MONTH)) then 12
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 2 MONTH)) then 11
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 3 MONTH)) then 10
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 4 MONTH)) then 9
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 5 MONTH)) then 8
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 6 MONTH)) then 7
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 7 MONTH)) then 6
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 8 MONTH)) then 5
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 9 MONTH)) then 4
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 10 MONTH)) then 3
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 11 MONTH)) then 2
when EXTRACT(MONTH from GIVEN_DATE) = EXTRACT(MONTH from DATE_SUB(CURRENT_DATE(), interval 12 MONTH)) then 1
end as MONTH_NUMBER
Ответ №1:
Рассмотрим следующий подход
select given_date, 1 mod(extract(month from given_date) 5, 12) as MONTH_NUMBER
Если применить к некоторым фиктивным датам — вывод будет
Ответ №2:
Вы ищете что-то подобное?
select 1 date_diff(current_date(), given_date, month)
Это делает много предположений, например, в given_date
течение года. Если нет, то арифметика по модулю, вероятно, делает то, что вы хотите:
select 1 (date_diff(current_date(), given_date, month) % 12)
Комментарии:
1. Я пытаюсь захватить диапазон в числовом значении. Например, диапазон: 07/2020 — 06/2021 , затем 07/2020 должно быть 1, 08/2020 должно быть 2 и так далее, и, наконец, 06/2021 должно быть 12.