我正在经历一个我似乎无法理解的挑战,并不是说那里有任何经验。我有一些汽车修理/喷雾器,我想知道有多少天没有使用。这是一个简单的表示例,展示了总共 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 的来龙去脉。我的问题是我怎样才能得到第一个 eDate 和第二个 sDate、第二个 eDate 和...等等之间的天数...抓挠我的头并因流感而疼痛我期待得到任何帮助...抱歉,我不是专业技术人员,所以尽可能用长英文回答...这就是我想要的:
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;
关于mysql - 不同行上两个列值之间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701166/