我有一个包含以下列的长表:
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名成员。
我怎样才能找出哪两个人在一起度过的最多时间和多少天? 就像给定的数据一样,Amar和Madhujita花了最多的时间。 这可以在一个查询中完成吗? 谢谢。
答案 0 :(得分: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;
Here是一个证明它的SQL小提琴。
答案 1 :(得分: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)))