0

我有一个包含以下列的长表:

Id(序列号)、名字(varchar15)、姓氏(varchar15)、开始日期(日期)、结束日期(日期)

条目如下:

* 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 名成员。

我怎样才能知道哪两个人在一起的时间最长以及相处了多少天?就像给定的数据一样,Amar 和 Madhujita 花费的时间最长。这可以在单个查询中完成吗?谢谢你。

4

2 回答 2

1

假设每人有一排,这是一个获得两个跨度之间重叠的问题。以下查询使用 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;

是一个演示它的 SQL Fiddle。

于 2014-02-24T20:55:44.743 回答
0

Thanx Gordon,我跟随你的踪迹,自己提出了一个更好理解的问题

select x.firstname as firstname1,x.lastname as surname1,y.firstname as firstname2,y.lastname as surname2
            from staff x inner join staff y on 
            x.startDate <= y.endDate and y.startDate <= x.endDate and x.firstname!=y.firstname and x.surname!=y.surname HAVING MIN(ABS(DATEDIFF(x.startdate,x.endDate)-DATEDIFF(y.startDate,y.endDate)))
于 2014-02-24T22:20:57.457 回答