Как выполнить запрос, чтобы получить результаты за последние 12 месяцев ( BigQuery)

Я хочу получить записи за последние 12 месяцев для определенного идентификатора в таблице Big Query. Я извлек месяц и год как отдельные столбцы из исходного столбца отметок времени. Я пытался использовать date_add() и date_diff(), но я получаю некоторые ошибки. Мой набор данных похож на:

Month Year MonthName    ID
8     2018   August      1
9     2018   September   2
9     2017   September   3

Как я могу достичь этого?

4 ответа

Решение

Я извлек месяц и год как отдельные столбцы из исходного столбца отметки времени

Я рекомендую выполнить 12-месячную фильтрацию на основе вашего исходного столбца отметок времени.
Предполагая, что это называется ts - ниже для BigQuery Standard SQL

WHERE DATE(ts) BETWEEN CURRENT_DATE() AND DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH)  

например

#standardSQL
SELECT ts, id
FROM `project.dataset.table`
WHERE id = 1
AND DATE(ts) BETWEEN CURRENT_DATE() AND DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH)

Если вы ищете последние 12 полных месяцев:

      SELECT
  DATE_SUB((DATE_TRUNC(CURRENT_DATE(), month)), INTERVAL 1 month),
  DATE_SUB((DATE_TRUNC(CURRENT_DATE(), month)), INTERVAL 13 month)

timestampпредполагается как стандартное обозначение метки времени для вашей таблицы BQ как поле идентификатора времени. Таким образом, вы можете фильтровать, как показано ниже, чтобы получить данные только за последние 12 месяцев:

WHERE DATE(TIMESTAMP_MILLIS(timestamp)) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH) and CURRENT_DATE()

Одним из методов является преобразование года / месяца в месяцы с некоторой даты. Затем сделайте то же самое с текущей датой:

where year * 12 + month >= extract(year from current_date) * 12 + extract(month from current_date) - 12

Это предполагает, что у вас нет будущих данных. То же самое относится и к будущим датам (используя <, а не>=).

Другие вопросы по тегам