当数据记录为会话时,如何在postgresql中生成负载报告?

当数据记录为会话时,如何在postgresql中生成负载报告?,sql,postgresql,Sql,Postgresql,我有一个包含会话的数据库:主要是: user, date_first, date_last john, 2015-01-01, 2015-08-23 john, 2015-07-02, 2016-09-01 mary, 2015-01-01, 2015-01-03 我想生成一个报告,告诉我每天/每周/每月有多少用户登录 只有通过PostgreSQL中的SQL才能做到这一点吗 月度报告的预期产出: Month, Users 2015-01, 25 2015-02, 50 2015-03,

我有一个包含会话的数据库:主要是:

user, date_first, date_last
john, 2015-01-01, 2015-08-23
john, 2015-07-02, 2016-09-01
mary, 2015-01-01, 2015-01-03
我想生成一个报告,告诉我每天/每周/每月有多少用户登录

只有通过PostgreSQL中的SQL才能做到这一点吗

月度报告的预期产出:

Month,   Users
2015-01,  25
2015-02,  50
2015-03,  12

使用级数生成函数是可能的。月份报告示例:

SELECT TO_CHAR(g.d, 'YYYY-MM') AS Month, COUNT(*) AS Users
FROM generate_series(
       (select date_trunc('month', MIN(date_first)) from sessions),
       (select MAX(date_last) from sessions), '1 month') AS g(d)
INNER JOIN sessions s
  ON (g.d, g.d + interval '1 month' - interval '1 day')
    OVERLAPS (s.date_first, s.date_last)
GROUP BY 1
HAVING COUNT(*) > 0
ORDER BY 1
这是一个样品


类似地,您可以为天和周报告编写查询。

date_first和
date_last
的意思是什么?date_first是会话开始的时间,date_last是会话完成的时间。这意味着在此时间间隔内,用户处于活动状态。