#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)