Sql 在Postgres中按月检索活跃员工
在我的员工数据库中,我有一个列Sql 在Postgres中按月检索活跃员工,sql,postgresql,Sql,Postgresql,在我的员工数据库中,我有一个列hire\u date,其中包含员工的招聘日期,还有一个列deactivate\u date,其中包含员工被解雇的日期(如果员工仍然在职,则为空) 要查找任何月初的在职员工人数,我可以运行以下查询。例如,在2019年1月1日查看我的在职员工- SELECT count(*) FROM employees WHERE hire_date <= '2019-01-01' AND (deactivate_date IS NULL OR deactivate_dat
hire\u date
,其中包含员工的招聘日期,还有一个列deactivate\u date
,其中包含员工被解雇的日期(如果员工仍然在职,则为空)
要查找任何月初的在职员工人数,我可以运行以下查询。例如,在2019年1月1日查看我的在职员工-
SELECT count(*)
FROM employees
WHERE hire_date <= '2019-01-01' AND
(deactivate_date IS NULL OR deactivate_date > '2019-01-01')
选择计数(*)
来自员工
出租地点(日期“2019-01-01”)
现在,我想知道的是2018年每个月1日的在职员工人数。显然,我可以运行这个查询12次,但我想知道是否有更有效的解决方案。pg的交叉表
和生成序列
函数似乎很有用,但我还没有形成正确的查询 使用生成_系列()
:
选择gs.dte,计数(e.HERE\U日期)
从生成_系列('2018-01-01':日期,'2018-12-01':日期,间隔'1个月')gs(dte)左连接
雇员
在e.hire_日期(通用dte)
G.dte分组
由gs.dte订购;
SELECT gs.dte, count(e.hire_date)
FROM generate_series('2018-01-01'::date, '2018-12-01'::date, interval '1 month') gs(dte) LEFT JOIN
employees e
ON e.hire_date <= gs.dte AND
(e.deactivate_date IS NULL OR e.deactivate_date > gs.dte)
GROUP BY gs.dte
ORDER BY gs.dte;