我有一张长桌子,上面有以下几列:
id(序列号)、firstname(varchar15)、lastname(varchar15)、startdate(日期)、enddate(日期)
条目如下:

* 1, Amar, XoXo, 2009-07-01, 2014-05-23.
* 2, Madhujita, Mami, 2009-03-11, 2014-06-24.
* 3, Akbak Ladar, 2000-04-12, 2009-01-01.
* 4, Abhashuk, Genjin, 2005-06-03, 2005-09-09.
* 5, Sinra, Iao, 2014-01-01, 2014-04-06

一直到500人。
我怎样才能知道哪两个人在一起的时间最多,有多少天?
和给定的数据一样,阿马尔和。
这可以在一个查询中完成吗?
谢谢您。

最佳答案

假设每人有一行,这是一个获取两个跨距之间重叠的问题下面的查询使用MySQL语法执行此操作(MySQL支持least()greatest()limit)这几乎可以在任何数据库中完成,但确切的语法可能会有所不同:

select lt1.firstname, lt1.lastname, lt2.firstname, lt2.lastname,
       greatest(0, datediff(least(lt1.EndDate, lt2.EndDate), greatest(lt1.StartDate, lt2.StartDate))) as overlap
from LongTable lt1 cross join
     LongTable lt2
where lt1.id <> lt2.id
order by overlap desc
limit 1;

Here是一个演示它的sql小提琴。

09-11 17:22