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

时间:2015-06-02 21:27:43

标签: postgresql count each

我有一个表格,其创建日期名为long,每个记录都有一个名为created_at的删除日期。如果删除了记录,则该字段保存该日期;这是一个逻辑删除。

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

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

active record

此记录在创建日期和删除日期之间的每一天都有效。包括最后一个。因此,如果我需要计算3月的活动记录,在这种情况下,必须在该月的每一天计算此记录。

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

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

1 个答案:

答案 0 :(得分:1)

你在这里:

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