Я работаю в среде PostgreSQL, и у меня есть следующая проблема: допустим, сегодня 8 апреля 2019 года, и я хочу получить полный список идентификаторов пользователей, которые открыли свою учетную запись в предпоследнем месяце (то есть с 1 по 28 февраля, 2019) + список идентификаторов пользователей, которые открыли свою учетную запись в том же месяце, но в 2017 и 2018 годах (то есть в феврале 18 и феврале 17).
Если бы мы предположили, что сегодня 25 июня 2019 года, я бы хотел получить список для следующих периодов: - с 1 по 30 апреля 2019 г.; - с 1 по 30 апреля 2018 г.; - с 1 по 30 апреля 2017 г.
У меня есть этот код SQL на данный момент. Как видите, я должен менять даты в предложении WHERE каждый месяц. Может ли кто-нибудь посоветовать мне, как я могу решить эту проблему?
SELECT
deposit_id,
to_char(activation_date, 'yyyy-mm-dd') as placement_start_date,
FROM fixed_term_plan
WHERE
activation_date BETWEEN Date '2019-01-01' AND Date '2019-01-31' or activation_date BETWEEN Date '2018-01-01' AND Date '2018-01-31' or activation_date BETWEEN date '2017-01-01' AND Date '2017-01-31'
Хм. Я думаю:
SELECT deposit_id,
to_char(activation_date, 'yyyy-mm-dd') as placement_start_date,
FROM fixed_term_plan ftp
WHERE extract(month from activiation_date) = extract(month from (now() - interval '2 month'));