在我的应用程序中,我有一个用户订购的约会,该表如下所示:
id simTypeID simID simDateTime startHour endHour
1 100 1 2016-09-01 09:00:00 09:00:00 10:00:00
2 100 2 2016-09-01 10:00:00 10:00:00 11:00:00
3 100 3 2016-09-01 11:00:00 11:00:00 12:00:00
4 100 1 2016-10-11 10:00:00 10:00:00 11:00:00
*注意:开始时间为每天09:00 AM
现在我想通过simID获取特定日期(例如2016-09-01)的所有空闲时间
这意味着结果需要在tbl_free_time中:
simID startFreeHour endFreeHour
1 10:00:00 23:59:00
2 09:00:00 09:59:00
2 11:00:00 23:59:00
3 09:00:00 10:59:00
3 12:00:00 23:59:00
如何在同一张表上使用TIMEDIFF? (需要获取第一行的endHour和第二行的startHour)。
解决该问题的任何其他方法将不胜感激!
我正在考虑使用以下方法创建temp tbl:
CREATE TABLE tbl_sim_temp LIKE tbl_sim
INSERT tbl_sim_temp
SELECT * FROM tbl_sim
WHERE simDateTime BETWEEN '2016-09-01 00:00:00' AND '2016-09-01 23:59:59'
ORDER BY id ASC
而不是使用LEFT JOIN,像这样-
SELECT TIMEDIFF(a.startHour,b.endHour)
FROM a tbl_sim
LEFT JOIN b tbl_sim_temp
WHERE a.simID = b.simID AND a.simTypeid = b.simtypeid AND a.id = b.id+1
但我被困住了
最佳答案
这是我的答案。
SELECT simID, startFreeHour, endFreeHour
FROM (
SELECT simID, "09:00:00" as startFreeHour, SUBTIME(startHour, '00:01:00') as endFreeHour
FROM tbl_sim
WHERE
startHour > "09:00:00"
AND DATE(simDateTime) = "2016-09-01"
UNION
SELECT simID, endHour as startFreeHour, "23:59:00" as endFreeHour
FROM tbl_sim
WHERE
endHour < "23:59:00"
AND DATE(simDateTime) = "2016-09-01"
) as t1
ORDER BY simID ASC, startFreeHour ASC
仅当day和simId只有一行并且假定秒始终为零以限制为23:59:00时,它才有效。因此,在这种情况下将不起作用:
id simTypeID simID simDateTime startHour endHour
1 100 1 2016-09-01 09:00:00 10:00:00 11:00:00
1 100 1 2016-09-01 09:00:00 12:00:00 13:00:00
如果可能,请告诉我,我会再试一次。
关于mysql - mysql在单个表中的行之间返回TIMEDIFF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40290918/