从具有特殊条件的数据库中获取日期
get dates from database where with special conditions
我为你打造了这个 fiddle:
https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=35f21ff5601276b4dba0e9250594d101
有一个查询,应该获取一天的所有时间段,条件如下:
- 这一天没有服务 1 或 3 的时段? > 获取所有时隙
- 这一天是否有一项或多项服务有 1 或 3? > 获取此服务之前的所有时间段
这很好用!
但是现在我有一个新问题!
- 是否有可用的服务 0,如 fiddle 所示,在此服务 0 之后有额外的获取时隙。
fiddle 向我展示了结果:
2021-07-07 14:00:00
不过我也想有
2021-07-07 16:00:00
因为在此插槽之前是一个服务 = 0
你能帮帮我吗??
如果你的意思是“立即在此插槽之前是服务= 0”,那么尝试:
SELECT * FROM `timeslots` ts
WHERE (
NOT EXISTS (
SELECT NULL FROM `timeslots` ts2
WHERE DATE(ts2.`timeslot`) = DATE(ts.`timeslot`)
AND TIME(ts2.`timeslot`) <= TIME(ts.`timeslot`)
AND `service` != 2
)
OR
EXISTS (
SELECT NULL FROM `timeslots` ts2
WHERE DATE(ts2.`timeslot`) = DATE(ts.`timeslot`)
AND DATE_SUB(ts.`timeslot`, INTERVAL 1 HOUR) = ts2.`timeslot`
AND ts2.`service` = 0
)
)
AND `timeslot` > DATE_ADD(CURDATE(), INTERVAL 1 DAY)
ORDER BY `timeslot`
我为你打造了这个 fiddle: https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=35f21ff5601276b4dba0e9250594d101
有一个查询,应该获取一天的所有时间段,条件如下:
- 这一天没有服务 1 或 3 的时段? > 获取所有时隙
- 这一天是否有一项或多项服务有 1 或 3? > 获取此服务之前的所有时间段
这很好用! 但是现在我有一个新问题!
- 是否有可用的服务 0,如 fiddle 所示,在此服务 0 之后有额外的获取时隙。
fiddle 向我展示了结果:
2021-07-07 14:00:00
不过我也想有
2021-07-07 16:00:00
因为在此插槽之前是一个服务 = 0
你能帮帮我吗??
如果你的意思是“立即在此插槽之前是服务= 0”,那么尝试:
SELECT * FROM `timeslots` ts
WHERE (
NOT EXISTS (
SELECT NULL FROM `timeslots` ts2
WHERE DATE(ts2.`timeslot`) = DATE(ts.`timeslot`)
AND TIME(ts2.`timeslot`) <= TIME(ts.`timeslot`)
AND `service` != 2
)
OR
EXISTS (
SELECT NULL FROM `timeslots` ts2
WHERE DATE(ts2.`timeslot`) = DATE(ts.`timeslot`)
AND DATE_SUB(ts.`timeslot`, INTERVAL 1 HOUR) = ts2.`timeslot`
AND ts2.`service` = 0
)
)
AND `timeslot` > DATE_ADD(CURDATE(), INTERVAL 1 DAY)
ORDER BY `timeslot`