mysql - 不同行上两个列值之间的天数

标签 mysql

我正在经历一个我似乎无法理解的挑战,并不是说那里有任何经验。我有一些汽车修理/喷雾器,我想知道有多少天没有使用。这是一个简单的表示例,展示了总共 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/

相关文章:

c# - DataGridview 重复数据或不将新行保存到数据库

python - 用于 Python 3.x 的 MySQL-db 库?

php - 当字符串中有行 ['value' ] 时,在 PHP 中转义字符串的正确方法是什么?

MySQL COUNT 和 GROUP BY

安卓和数据库

php - 从不同的表sql返回数据到html

php - mysql根据数据在哪个表中从表中选择

mysql - 偏移量限制mysql查询

mysql - 查询表达式 '.ID' 中缺少运算符

php - 测试 SQL 查询的真假