在 Postgresql 中计算特定月份的每天数据

Count data per day in a specific month in Postgresql

我有一个 table,每条记录的创建日期为 created_at,删除日期为 delete_at。如果记录被删除,该字段保存该日期;这是一个逻辑删除。

我需要计算特定月份的active records。要了解对我来说什么是 active record,让我们看一个例子:

对于这个例子,我们将使用这个假设的记录:

id | created_at | deleted_at
1  | 23-01-2014 | 05-06-2014

此记录在其创建日期和删除日期之间的每一天都处于活动状态。包括最后那个。所以如果我需要统计三月的活跃记录,在这种情况下,这条记录必须在那个月的每一天都被统计。

我有一个显示特定月份活动记录的查询(非常容易实现),但我的主要问题是如何计算该月每一天的活动。

SELECT
  date_trunc('day', created_at) AS dia_creacion,
  date_trunc('day', deleted_at) AS dia_eliminacion
FROM
  myTable
WHERE
  created_at < TO_DATE('01-04-2014', 'DD-MM-YYYY')
  AND (deleted_at IS NULL OR deleted_at >= TO_DATE('01-03-2014', 'DD-MM-YYYY'))

你在这里:

select 
  TO_DATE('01-03-2014', 'DD-MM-YYYY') + g.i, 
  count( case (TO_DATE('01-03-2014', 'DD-MM-YYYY') + g.i) between created_at and coalesce(deleted_at, TO_DATE('01-03-2014', 'DD-MM-YYYY') + g.i)
    when true then 1
    else null
  end)
from generate_series(0, TO_DATE('01-04-2014', 'DD-MM-YYYY') - TO_DATE('01-03-2014', 'DD-MM-YYYY')) as g(i)
left join myTable on true
group by 1
order by 1;

您可以添加更具体的条件以仅加入来自 myTable 的相关记录,但即使没有它,您也可以了解如何实现所需的计数。