在 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
的相关记录,但即使没有它,您也可以了解如何实现所需的计数。
我有一个 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
的相关记录,但即使没有它,您也可以了解如何实现所需的计数。