1
我有一个包含createddate的记录表。我想返回过去6个日历月中的每个月的新记录,包括本月的部分月份。我很了解SQL Server,但不熟悉PostgreSQL。在PostgreSQL中查找过去n个月中的每个月的新记录
我已经能够与此查询以获取滚动个月的数据:从5/22-6/21
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
但在6/21,这将返回数据,4/22-5/21等
我想要的数据如下:6/1-6/21(部分本月),5/1-5/31等。
有什么建议吗?我也怀疑我可以在循环中做到这一点,但对语法还不够熟悉。目前,我正在从PostgreSQL Maestro对备份文件进行测试。
谢谢。
你钉它,汤姆。这正是我需要的。 – nycdan
我很想把它放到控制循环中,这样我就可以更容易地修改周期数。如果有人愿意获得积分...... :) – nycdan
您可以使用窗口函数来获得所需的结果(请参阅http://www.postgresql.org/docs/current/static/tutorial-window.html )。例如:SELECT DISTINCT date_trunc('month',createddate)as start,count()OVER(PARTITION BY date_trunc('month',createddate))FROM a_group; – Tom