Использование current_date, чтобы получить начало и конец месяца за последние 12 месяцев - PullRequest
0 голосов
/ 02 апреля 2020

Я пишу следующий запрос, чтобы рассчитать уровень продаж по месяцам, и я хочу убедиться, что он всегда смотрит на интервал: с 1 по конец месяца, за последние 12 месяцев. Я пробовал следующее, но я не уверен, что это займет 1-е и последнее число месяца, и я чувствую, что это может быть записано в более коротком запросе?

select 
datetrunc('month',date)
,count(id) filter (where status='sold' and (date between (datetrunc('month','current_date - interval '1 months')) and datetrunc('month', current_date) - Interval '1 days'))
/ count(id) filter (where date between (datetrunc('month','current_date - interval '1 months')) and datetrunc('month', current_date) - Interval '1 days') as Mar2020_Sales_Rate
,..... as Feb2020_Sales_Rate
,.
,.
,..... as Mar2019_Sales_Rate
from sales
group by 1;

1 Ответ

0 голосов
/ 02 апреля 2020

Я выбрал способ получения 1-го и конца месяца, не используя текущую дату, а скорее дату создания (заказа) в моих данных. Пожалуйста, предложите любой другой запрос, который может показаться более эффективным, или если вы считаете, что в этом запросе есть изъян:

select distinct creation_date::date,
       (creation_date - Interval '1 months')::date as Minus_1M,
       (creation_date - Interval '2 months')::date as Minus_2M,
       (creation_date - Interval '3 months')::date as Minus_3M,
       ...
       (creation_date - Interval '12 months')::date as Minus_12M,
       extract('day' from creation_date) as Day_of_month,
       date_trunc('month', (creation_date::date - extract('day' from 
       creation_date)::int))::date as Beginning_of_month,
       creation_date::date - extract('day' from creation_date)::int as End_of_month
from order_data
order by 1 desc;
...