sql如何计算重叠日期

时间:2019-04-15 14:40:04

标签: sql oracle

这里有一个人的五个租房记录,是否有办法检查这5个数据中是否有超过30天的重叠借贷期?

例如(01-FEB-19 20-MAR-19)和(14-FEB-19 25-MAR-19)在30天内有重叠

编辑: 如果有重叠,我正在寻找比较5个数据的答案。因为可能会有其他人在另外3个周期中将其租借3次,所以我不知道如何遍历每个人的整个日期范围并进行检查

谢谢!

    START_DAT  DATE_RETUN 
    -------------------- 
     19-FEB-19 20-FEB-19                          
     01-FEB-19 20-MAR-19                         
     14-FEB-19 25-MAR-19                         
     02-FEB-19 22-MAR-19                         
     14-FEB-19 25-FEB-19 

3 个答案:

答案 0 :(得分:1)

这回答了问题的原始版本。

您可以使用算术计算重叠并检查:

select t.*, t2.*
from t join
     t t2
     on t.start <= t2.return - interval '30' day and
        t.return >= t.start + interval '30' day
where (least(t1.return, t.return) - greatest(t.start, t2.start)) >= 30;

on子句中的间隔调整只是为了提高效率。

答案 1 :(得分:0)

VarDumper::setHandler(function ($var) {
    $cloner = new VarCloner();
    $cloner->setMaxItems(-1); // Specifying -1 removes the limit
    $dumper = 'cli' === PHP_SAPI ? new CliDumper() : new HtmlDumper();

    $dumper->dump($cloner->cloneVar($var));
});

答案 2 :(得分:0)

在T-SQL中,可以按照以下查询来实现:

选择
p。*来自 (选择T。*,

datediff(day,T.START_DAT,T.DATE_RETUN)作为Overlap_days

来自T)as p 其中p.Overlap_days> = 30