Mysql查询将返回数据库中时间戳之间的空闲槽
Posted
技术标签:
【中文标题】Mysql查询将返回数据库中时间戳之间的空闲槽【英文标题】:Mysql query that will return free slots between timestamps in database 【发布时间】:2015-04-07 21:09:11 【问题描述】:我在数据库中有三列 - event_id、timestamp 和 length_of_event_in_seconds。 每个事件的开头都有一些时间戳,现在我想生成一个查询,该查询将在一些时间戳之间的空闲时间插入新事件(持续 length_of_event_in_seconds) - 只要有“length_in_seconds”空闲点。有人可以帮我吗?
【问题讨论】:
你说的; “介于”mysqltutorial.org/mysql-between - 你几乎回答了自己的问题。 谢谢,我只是在查找可以在查询之间使用的正确值时遇到问题,我不知道如何检查空闲槽是否足够长以存储新事件 查询并使用条件语句。if/else
你能帮我构建这样的查询吗?
【参考方案1】:
使用收集到的建议here:
select *
from table
where ts_begin >= 'begin-boundary-time'
and ts_begin + interval length_of_event_in_seconds seconds <= 'end-boundary-time'
【讨论】:
这实际上无法正常工作。它只会找到在搜索时间跨度之后开始和结束之前的事件。它不包括部分重叠或完全包含搜索时间跨度的事件。要找到重叠,您需要交换开始和结束“边界时间”。像ts_begin <= 'end-boundary-time' and ts_end >= 'begin-boundary-time'
这样的东西。这将为您提供重叠事件的列表。如果返回零行,则没有重叠。
实际上,OP 正在寻找反向搜索——事件之间的空闲时间在哪里。我认为他对如何编写 where 子句来确定被认为是“免费”的时间感到困惑。即使这不能解决所写的问题(由于 OP 帖子在结构上含糊不清,它不能解决问题),它也应该在 where 子句上推动他朝着正确的方向前进。
是的,如果表中有“空闲时间”的行。但是,更有可能存在包含事件的行,并且任何时间未安排的事件都被认为是免费的。
嘿伙计们,我只是假设使用 PaulProgrammer 建议的逻辑不可能添加重叠事件,这实际上是我的目标 - 让一切井井有条而不重叠。在那种情况下 - Paul 建议的代码就足够了吗?
@randomuser2 他的代码只会找到我上面描述的事件。它不会找到部分重叠的事件或完全包含所描述的时间范围的事件。如果您交换开始/结束“边界时间”,那么它将返回在此期间发生的所有事件。如果为零,则没有任何重叠。如果有任何行,这些行会重叠,您可以进一步决定是否应该发生重叠。可能是一列说明共同使用/独占事件或一次可以发生多少事件的限制。以上是关于Mysql查询将返回数据库中时间戳之间的空闲槽的主要内容,如果未能解决你的问题,请参考以下文章