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

Count data per day in a specific month in Postgresql

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

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

在这个例子中,我们将使用这个假设记录:

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

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

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

1
2
3
4
5
6
7
8
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'))


这个给你:

1
2
3
4
5
6
7
8
9
10
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的相关记录,但即使没有它也会让您了解如何根据需要实现计数。