几天前我问了一个类似的问题,但没有完全得到我正在寻找的答案,特别是 SQL(问题是 Check if time in a database surpasses specific hour )。
基本上,我有以下查询:
SELECT DAYNAME(arrivalTime) AS day, COUNT(*) AS count
FROM bookings
WHERE HOUR(arrivalTime) = 13
AND DAYNAME(arrivalTime) = 'Monday'
这将计算周一 13:00 开始的预订的条目数。如何更改此设置以便计算从到达时间到接载时间的每个小时?
例如,如果我的到达时间 - 取货时间为 13:00 - 17:00,那么 13:00、14:00、15:00 和 16:00 都会将此视为条目。
有一些建议,但并没有真正实现。
编辑:
我正在制作的日历:
我的数据库:
示例和预期输出:
arrivalTime - pickupTime
13 - 15 (hours 13, 14 are counted)
10 - 14 (hours 10, 11, 12, 13 are counted)
16 - 17 (hours 16 are counted)
13 - 17 (hours 13, 14, 15, 16 are counted)
11 - 12 (hours 11 are counted)
基本上,现在它只是计算arrivalTime为X的条目数。因此,如果我们有10个条目在周一13:00开始,那么在我链接的HTML表格上,接下来的数字将是10至 13:00。我想让每个小时都计算当时实际完成的预订数量。
为了方便直观,这里简单地放了一个狗窝。我们每小时检查一下狗舍里有多少只狗。因此,如果在 13:00 - 15:00 之间进行预订,则不应仅在 13:00 之前添加 +1,而且还应在时间重叠时添加 +1 到 14:00。也许比我想象的要复杂一点。
编辑2:
现在我的函数中有这个查询
SELECT DAYNAME(arrivalTime) AS day, COUNT(*) AS count
FROM bookings
WHERE HOUR(arrivalTime) = $hour
AND DAYNAME(arrivalTime) = '$dayname'
在 HTML 中,我像这样传递值
<td>
<span>
<p style="float:left">10:00</p>
<p style="float:right"> (<?php $var->get_CalendarCount($conn,10,'Monday'); ?>)</p>
</span>
</td>
最佳答案
我想即使在特定时间没有预订,您也需要计算。您需要一个小时表来执行此操作。
SELECT H.day_name AS day,
Count(b.arrivaltime) AS count
FROM hour_table H
LEFT OUTER JOIN bookings B
ON h.day_name = Dayname(arrivaltime)
AND h.hours = Hour(arrivaltime)
WHERE h.hours BETWEEN 13 AND 17
AND h.day_name = 'Monday'
GROUP BY H.day_name
编辑:如果您不想计算 X
和 Y
之间的每个预订。然后你需要条件聚合。像这样的事情
Count(case when h.hours BETWEEN 13 AND 17 then b.arrivaltime .. end) AS count
当问题中有足够的信息时可以添加完整答案
关于mysql - 计算时间之间的小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33984571/