SQL在日期之间找不到任何活动

时间:2017-04-22 05:20:00

标签: sql postgresql

我试图找到使用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'

但是它显示错误的值,特别是对于较长的表

产出预期: 我对此输出的期望是查询公司在分配或解雇员工方面没有活动的最长时间。

1 个答案:

答案 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没有前一行,而且那一行出现在顶部,我们只是跳过它。