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