Форматирование и фильтрация результатов запроса по дате из Google BigQuery - PullRequest
0 голосов
/ 06 августа 2020

Я использую Python для извлечения данных из базы данных BigQuery. Данные из базы данных содержат данные за годы, но мне нужны только последние два года. Кроме того, данные в столбце bill_date отформатированы неправильно (например, 8 августа 2020 года - это «20200806») и имеют тип int64.

В запросе SQL, как мне получить только данные за последние два года заканчиваются в последний день предыдущего месяца? Так что в этом случае мне нужны только данные с 1 августа 2018 г. по 31 июля 2020 г. Любая помощь или документация приветствуются :)

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT <columns>
FROM `project.dataset.table`
WHERE PARSE_DATE('%Y%m%d', FORMAT('%i', bill_date)) 
  BETWEEN DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 2 YEAR)
  AND DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 1 DAY)  

Вы можете выполнить рефакторинг выше, если хотите, чтобы он был менее подробным

#standardSQL
SELECT <columns>
FROM `project.dataset.table`, 
UNNEST([DATE_TRUNC(CURRENT_DATE(), MONTH)]) month_start
WHERE PARSE_DATE('%Y%m%d', FORMAT('%i', bill_date)) 
  BETWEEN DATE_SUB(month_start, INTERVAL 2 YEAR)
  AND DATE_SUB(month_start, INTERVAL 1 DAY)
0 голосов
/ 06 августа 2020

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

where bill_date < cast(format_date('%Y%m%d', date_trunc(current_date, month)) as int64) and
      bill_date >= cast(format_date('%Y%m%d', date_add(date_trunc(current_date, month), interval -24 month)) as int64)
  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...