Есть ли более короткий способ написать это условие в BigQuery? - PullRequest
0 голосов
/ 14 февраля 2020
SELECT IF(
    TIMESTAMP_DIFF(TIMESTAMP(current_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY) < 0,
    TIMESTAMP_DIFF(TIMESTAMP(next_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY),
    TIMESTAMP_DIFF(TIMESTAMP(current_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY)
) AS days_until_july_4th

В частности, мне интересно, есть ли способ избежать написания этой строки дважды:

TIMESTAMP_DIFF(TIMESTAMP(current_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY)

Она написана один раз для сравнения с 0, и затем снова написано для else_result.

Можно ли этого избежать?

1 Ответ

1 голос
/ 14 февраля 2020

... но для целей моего вопроса вы можете просто предположить, что любое утверждение может быть там

Хорошо, так что ниже "подробного" фиктивного примера

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '2020-02-14 17:46:33.270196 UTC' order_date, 
    STRUCT('2020-02-12 17:46:33.270196 UTC' AS july_4th) next_year_holidays,
    STRUCT('2020-02-13 17:46:33.270196 UTC' AS july_4th) current_year_holidays
)
SELECT IF(
    TIMESTAMP_DIFF(TIMESTAMP(current_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY) < 0,
    TIMESTAMP_DIFF(TIMESTAMP(next_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY),
    TIMESTAMP_DIFF(TIMESTAMP(current_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY)
) AS days_until_july_4th
FROM `project.dataset.table` t1

можно переписать как

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '2020-02-14 17:46:33.270196 UTC' order_date, 
    STRUCT('2020-02-12 17:46:33.270196 UTC' AS july_4th) next_year_holidays,
    STRUCT('2020-02-13 17:46:33.270196 UTC' AS july_4th) current_year_holidays
)
SELECT IF(
    diff < 0,
    TIMESTAMP_DIFF(TIMESTAMP(next_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY),
    diff
) AS days_until_july_4th
FROM `project.dataset.table` t1,
UNNEST([TIMESTAMP_DIFF(TIMESTAMP(current_year_holidays.july_4th), TIMESTAMP(t1.order_date), DAY)]) diff

Надеюсь, это дает вам представление

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