Создать столбец с истиной / ложью за предыдущий месяц

#google-bigquery

#google-bigquery

Вопрос:

У меня есть столбец с датами в следующем формате: гггг / м / д

Как я могу создать вычисляемый столбец, который имеет значения true для каждой записи за предыдущий месяц и false для остальных? Я пробовал, как показано ниже, но я не получаю правильный вывод.

 IF(Date = DATE_SUB(DATE_TRUNC(Date, MONTH), INTERVAL 1 MONTH), TRUE, FALSE) AS PreviousMonth 
  

Ответ №1:

Ниже приведен стандартный SQL BigQuery

Если ваш столбец даты имеет строковый тип данных в формате гггг / м / д (как указано в исходном вопросе) — вы можете использовать ниже

 #standardSQL
SELECT *, 
  DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH) = 
  DATE_TRUNC(PARSE_DATE('%Y/%m/%d', date), MONTH) AS PreviousMonth 
FROM `project.dataset.table`   
  

Если ваш столбец данных имеет тип данных DATE — вам следует использовать приведенный ниже

 #standardSQL
SELECT *, 
  DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH) = 
  DATE_TRUNC(date, MONTH) AS PreviousMonth 
FROM `project.dataset.table`   
  

Комментарии:

1. Привет, Михали, моя дата указана в типе данных Date. Нужно ли мне использовать PARSE_DATE здесь. Я изменил вот так. Отображается ошибка. DATE_TRUNC(DATE_SUB(CURRENT_DATE(), ИНТЕРВАЛ 1 МЕСЯЦ), МЕСЯЦ) = DATE_TRUNC (Дата), МЕСЯЦ) КАК предыдущий месяц

2. вы упомянули, что это в yyyy/m/d формате, поэтому я подумал, что это string . Но если это a, date вы просто заменяете PARSE_DATE('%Y/%m/%d', date) на date . Смотрите обновление в моем ответе

Ответ №2:

Вы можете попробовать этот альтернативный вариант:

 WITH querytable AS(
  SELECT '2020/06/29' AS input_date
  UNION ALL
  SELECT '2020/07/29' AS input_date
  UNION ALL
  SELECT '2020/08/30' AS input_date )
SELECT
  PrevMonth,
  CurrMonth,
  IF(PrevMonth = CurrMonth, TRUE, FALSE) true_false
FROM (
  SELECT EXTRACT(MONTH FROM PARSE_DATE('%Y/%m/%d', input_date)) AS PrevMonth,
         EXTRACT(MONTH FROM DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AS CurrMonth
  FROM
    querytable)