На этом сайте уже разбиралась типовая и, что скрывать, одна из моих любимых задач: вычисление показателя (евро)финансового года и квартала с записью в формате FYxxQt, где xx - последние 2 цифры года, t - порядковый номер квартала (например FY25Q1, FY26Q3 и т.п.). В этой небольшой статье я покажу код для SQL применительно к Trino, который является основой BI Конструктора CRM Битрикс24. Вычислять будем по записи таблицы пользовательских полей сделок crm_deal_uf, допустим это будет значение из пользовательского поля UF_111. И конечно же, это не единственное решение, я привожу один из действенных вариантов.

Нам важно это корректно встроить в общую инструкцию SQL запроса для нашего датасета. Кварталы начинают свой отсчет с 1 апреля каждого года (Q1). Поэтому полная конструкция SQL будет такая:

  -- Финансовый квартал FYxxQt по дате 
  CONCAT(
    'FY',
    CAST(
      CASE
        WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) >= 4 THEN year(try_cast(crm_deal_uf.UF_CRM_111 AS date)) - 2000
        ELSE year(try_cast(crm_deal_uf.UF_CRM_111 AS date)) - 2000 - 1
      END AS VARCHAR
    ),
    'Q',
    CAST(
      CASE
        WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) BETWEEN 4 AND 6 THEN 1
        WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) BETWEEN 7 AND 9 THEN 2
        WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) BETWEEN 10 AND 12 THEN 3
        ELSE 4
      END AS VARCHAR
    )
  ) AS "FYQ"

Советую в лучших традициях документации Trino SQL использовать конструкцию try_cast(... AS date) для безопасного преобразования поля с датой. Удачного кодинга!