按月分组的开始日期和结束日期的可用项目计数

问题描述 投票:0回答:1

我正在与 PSQL/pgAdmin 合作,希望获得当年按月分组的库存总数。我尝试过 generated_series,但是当我尝试使用计数过滤器时,它似乎忽略了日期。

我的尝试

select
g.day::date,
count(item) filter(
  where install-date <= g.day+'1month'::interval
  and (removed-date is null or removed-date < g.day+'1month'::interval))
FROM table
CROSS  JOIN generate_series('2024-01-01'::timestamp, '2025-01-01'::timestamp, '1 month'::interval) AS g(day)
group by 1,2

举个例子:

项目 安装日期 删除日期
项目1 2024 年 1 月 2024 年 3 月
项目3 2024 年 2 月 2024 年 4 月

所以结果看起来像这样

安装计数
一月 1
二月 2
三月 1
四月 0
sql postgresql
1个回答
0
投票

所有月份均在日期范围内生成。

然后将每个月与

install_date
进行比较,并且removed_date 应大于month_start,以便将其排除在该月之外。

小提琴

WITH month_series AS (
    SELECT generate_series('2024-01-01'::date, '2024-12-01'::date, '1 month'::interval) AS month_start
)
SELECT 
    to_char(month_series.month_start, 'Mon YYYY') AS month, 
    COUNT(i.item) AS install_count
FROM 
    month_series
LEFT JOIN 
    inventory i 
    ON i.install_date <= month_series.month_start 
    AND (i.removed_date IS NULL OR i.removed_date > month_series.month_start)
GROUP BY 
    month_series.month_start
ORDER BY 
    month_series.month_start;

输出

安装计数
2024 年 1 月 1
2024 年 2 月 2
2024 年 3 月 1
2024 年 4 月 0
2024 年 5 月 0
2024 年 6 月 0
2024 年 7 月 0
2024 年 8 月 0
2024 年 9 月 0
2024 年 10 月 0
2024 年 11 月 0
2024 年 12 月 0
© www.soinside.com 2019 - 2024. All rights reserved.