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