我正在经历一个挑战,我似乎无法左右我的头,而不是有任何经验在那里喋喋不休。我有一些汽车修理/喷漆间,我想知道有多少天不用。这是一个简单的表格示例,总共20个隔间中只有一个隔间。我总是一次只查询一个间隔,除非有一种聪明的方法可以执行多个间隔:
bayID | sDate | eDate
------+------------+------------
1 | 2014-09-06 | 2014-09-13
1 | 2014-09-17 | 2014-09-21
1 | 2014-09-27 | 2014-09-30
1 | 2014-10-30 | 2014-10-13
我一直在阅读最新的Datediff,但我承认我并不真正了解它或mySQL的内部和外部。我的问题是我怎样才能得到从第一个星期日到第二个星期日,第二个星期日和。。。等等。。。看着我的头和流感疼痛我期待着任何帮助。。。抱歉,不是很专业,所以如果可能的话用长英语回答。。。这就是我允许的:
bayID | sDate | eDate availFor
------+------------+------------+---------
1 | 2014-09-06 | 2014-09-13 3
1 | 2014-09-17 | 2014-09-21 5
1 | 2014-09-27 | 2014-09-30 0
1 | 2014-10-30 | 2014-10-13
最佳答案
如果时间段没有排序,则可以通过计算总持续时间并在使用时减去持续时间来获得结果。下面是一个例子:
select bayid,
min(sdate) as firstsdate, max(edate) as lastedate,
sum(datediff(edate, sdate)) as daysinuse,
datediff(max(edate), min(sdate)) - sum(datediff(edate, sdate)) as DaysNotInUse
from bays b
group by bayId;
这将为您提供从使用间隔的第一天到最后一天之间未使用的天数。
编辑:
这是一个完全不同的问题。您可以用相关子查询来回答它:
select b.*,
datediff((select min(sdate)
from bays b2
where b2.bayId = b.bayId and b2.sdate >= b.edate
), edate) - 1 as DaysFreeBetweenBookings
from bays b;