gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:34:17 25 4
gpt4 key购买 nike

我有一个记录表,其中有一个创建日期。我想返回过去 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

但是在 6/21,这将返回 5/22-6/21、4/22-5/21 等的数据。
我希望数据按如下方式存储:6/1-6/21(部分当月)、5/1-5/31 等。

有什么建议吗?我还怀疑我可以循环执行此操作,但对语法还不够熟悉。现在,我正在从 PostgreSQL Maestro 对备份文件进行测试。

谢谢。

最佳答案

我认为 date_trunc 函数可能是您的 friend (参见 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,

等...

关于postgresql - 在 PostgreSQL 中查找过去 n 个月中每个月的新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6430344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com