我试图找到使用Postgres的EmployeeActivity Table公司没有加入员工或裁员的任何活动的天数。 Null指的是那些仍然在公司内部进行活动的人,而DateLeave则指他们离开公司或不再工作。
DateJoined DateLeave Name
................................
2012-06-20 NULL Terrence
2012-06-21 2013-06-23 Mady
2010-06-20 2012-06-24 Greg
2013-06-20 NULL Matt
我对此的试验是
select EXTRACT(DAY FROM MAX(EmployeeActivity.DateJoined) - MIN(EmployeeActivity.DateLeave)
From EmployeeActivity
WHERE EmployeeActivity.DateLeave IS 'NULL'
但是它显示错误的值,特别是对于较长的表
产出预期: 我对此输出的期望是查询公司在分配或解雇员工方面没有活动的最长时间。
答案 0 :(得分:1)
如果我理解正确,以下内容应符合您的需求:
SELECT
ActivityDate,
lag(ActivityDate) over (ORDER BY ActivityDate) as PreviousActivityDate,
Date_Part('day',ActivityDate - lag(ActivityDate) over (ORDER BY ActivityDate)) as Difference
FROM
(
select DateJoined as ActivityDate from EmployeeActivity
union
select coalesce(DateLeave,now()) from EmployeeActivity
) AllActivityDates
ORDER BY Difference DESC
LIMIT 1 OFFSET 1
OFFSET 1
的原因是因为最早的DateJoined
没有前一行,而且那一行出现在顶部,我们只是跳过它。