在PostgreSQL中查找过去n个月中每个月的新记录

nyc*_*dan 1 postgresql datetime

我有一个记录表,其中包含一个创建日期.我想返回过去6个日历月中的每一个的新记录,包括本月的部分记录.我对SQL Server了如指掌,但对PostgreSQL并不熟悉.

我已经能够使用此查询获取滚动月份的数据:

select 
COUNT(ID) as Total,
COUNT(CASE WHEN createddate between (now() - '1 month'::interval)::timestamp AND now() THEN AG.ID END) as ThisMonth,
COUNT(CASE WHEN createddate between (now() - '2 month'::interval)::timestamp AND (now() - '1 month'::interval)::timestamp THEN AG.ID END) as LastMonth,
COUNT(CASE WHEN createddate between (now() - '3 month'::interval)::timestamp AND (now() - '2 month'::interval)::timestamp THEN AG.ID END) as PrevMonth,
COUNT(CASE WHEN createddate between (now() - '4 month'::interval)::timestamp AND (now() - '3 month'::interval)::timestamp THEN AG.ID END) as PrevMonth2,
COUNT(CASE WHEN createddate between (now() - '5 month'::interval)::timestamp AND (now() - '4 month'::interval)::timestamp THEN AG.ID END) as PrevMonth3,
COUNT(CASE WHEN createddate between (now() - '6 month'::interval)::timestamp AND (now() - '5 month'::interval)::timestamp THEN AG.ID END) as PrevMonth4
FROM a_group AG
Run Code Online (Sandbox Code Playgroud)

但是在6月21日,这将返回5/22-6/21,4/22-5/21等
数据.我希望数据如下:6/1-6/21(部分当前月份) ),5/1-5/31等

有什么建议?我也怀疑我可以在一个循环中做到这一点,但我还不熟悉语法.现在,我正在从PostgreSQL Maestro对备份文件进行测试.

谢谢.

Tom*_*Tom 5

我认为这个date_trunc功能可能是你的朋友(见postgres docs).我想你会做这样的事情:

select 
COUNT(ID) as Total,
COUNT(CASE WHEN createddate between date_trunc('month', now()) AND now() THEN AG.ID END) as ThisMonth,
COUNT(CASE WHEN createddate between date_trunc('month', now()) - interval '1 month' AND date_trunc('month', now()) - interval '1 day' THEN AG.ID END) as LastMonth,
Run Code Online (Sandbox Code Playgroud)

等等...