Узнайте данные за прошлый месяц при переходе на новый год

#sql #amazon-athena #amazon-quicksight

#sql #amazon-athena #amazon-quicksight

Вопрос:

В настоящее время я использую этот код для просмотра данных за предыдущий месяц для quicksight в Athena от Amazon (эта первая часть работает *):

 SELECT month, count(1)
FROM table1
WHERE CAST(EXTRACT(month from now()) - 1 as VARCHAR(2)) = month
GROUP BY month
  

Проблема в том, как гарантировать, что этот код будет работать, когда мы перейдем на новый год? В настоящее время у меня есть

 SELECT month, count(1)
FROM table1
WHERE CASE WHEN( month = '1' THEN month = '13'
ELSE month
END)
CAST(EXTRACT(month from now()) - 1 as VARCHAR(2)) = month
GROUP BY month
  

Чтобы уточнить, месяц был введен как строка, отсюда и ПРИВЕДЕНИЕ к VARCHAR(2), чтобы получить от «01» до «12».
Мой мыслительный процесс, стоящий за этим, заключался в том, что если month = ’01’, то он считывает его как ’13’, затем извлекает ‘1’, равный ’12’. Но не уверен, что это сработает

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

1. Храните ли вы год в своей таблице? Ваш запрос не показывает его. Пожалуйста, покажите нам образцы данных и желаемые результаты, чтобы прояснить ваш вопрос.

Ответ №1:

Вы можете использовать date_add функцию для вычитания одного месяца из сегодняшнего дня:

 SELECT DATE_ADD('month', -1, NOW())
  

В качестве альтернативы вы можете вычесть интервал в один месяц для достижения тех же результатов:

 SELECT NOW() - INTERVAL '1' MONTH
  

В обоих случаях вы можете использовать MONTH(…) или EXTRACT(MONTH FROM …) для получения номера месяца.

Ответ №2:

Кажется, вы хотите:

 where month = extract(month from now()) - 1 or
      (extract(month from now()) = 1 and month = 12)
  

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

1. Я должен уточнить, что месяц был введен в виде строки, поэтому мне пришлось использовать его, чтобы получить VARCHAR(2)