mysql-如何查找每行之间的差异日期

j8ag8udp  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(277)

嗨,编程大师,
我需要帮助。这是一个员工数据 NULLTerminationDate 参照当前日期,表示该员工仍在工作。我需要找到最长的时间(天)没有人雇用或终止。
表名: Employee 列名: ID , HireDate , TerminationDate ```
Employee

ID HireDate TerminationDate
1 2009-06-20 2016-01-01
2 2010-02-12 NULL
3 2012-03-14 NULL
4 2013-09-10 2014-01-01
5 2013-09-10 NULL
6 2015-04-10 2015-05-01
7 2010-04-11 2016-01-01
8 2012-05-12 NULL
9 2011-04-13 2015-02-13

我已经制定了需要做什么的流程
合并数据 `HireDate` 以及 `TerminationDate` (应该有18行)
订购日期
从第(n)行和第(n-1)行中找出每个日期之间的差异
获得最大差异
然而,我不知道如何在mysql中实现它,也不知道它是否可行。我想知道有没有别的方法?请帮帮我
eh57zj3b

eh57zj3b1#

在mysql版本8之前,这是相当复杂的。但你可以做到:

select dte, next_dte, 
       datediff(coalesce(next_dte, curdate()), dte) as diff
from (select dte,
             (select min(d2.dte)
              from ((select hiredate as dte
                     from t
                    ) union   -- intentionally remove duplicates
                    (select terminationdate as dte
                     from t
                     where teminationdate is not null
                    )
                   ) d2
              where d2.dte > d.dte
             ) next_dte
      from ((select hiredate as dte
             from t
            ) union   -- intentionally remove duplicates
            (select terminationdate as dte
             from t
             where teminationdate is not null
            )
           ) d
     ) d
order by diff desc
limit 1;

请注意,这将根据当前日期查找最近的期间。您可以通过更换 curdate() 不管你想什么截止日期。如果您不想要最新的时段,请添加 where next_dte is not null 到外部查询。

相关问题