每个员工已经在 AvailSlots 中有一个可用时隙表,如下所示:
Staff_ID Avail_Slots_Datetime
1 2015-1-1 09:00:00
1 2015-1-1 10:00:00
1 2015-1-1 11:00:00
2 2015-1-1 09:00:00
2 2015-1-1 10:00:00
2 2015-1-1 11:00:00
3 2015-1-1 09:00:00
3 2015-1-1 12:00:00
3 2015-1-1 15:00:00
我需要找出哪些员工在每个时间段有 2 个(或 3、4 个等)连续可用时间段。作为一个新手,如果查询是针对 2 个连续的时隙,我只知道要编写下面的 INNER JOIN 代码。
SELECT a.start_time, a.person
FROM a_free a, a_free b
WHERE (b.start_time = addtime( a.start_time, '01:00:00' )) and (a.person = b.person)
但是,显然,这样做,我将不得不添加更多的 INNER JOIN 代码 - 对于每种情况 - 取决于查询是针对给定日期/小时的 3 或 4 或 5 等连续可用时隙。因此,我想学习一种更有效、更灵活的方法来做同样的事情。具体来说,我需要的查询代码(用自然语言)是这样的:
对于 AvailSlots 中的每个时间段,列出从该日期时间开始具有 X(其中 X 可以是我为每个查询指定的任何数字,从 1 到 24)连续日期时间段的员工。如果不止一名员工可以满足该标准,则抢七是他们的“等级”,该等级保存在下面的单独表格中:
Ranking Table (lower number = higher rank) Staff_ID Rank 1 3 2 1 3 2
如果答案是使用“mysql variables”、“views”等,请解释一下这些东西是如何工作的。同样,作为一个 mysql 新手,到目前为止,我只知道“select”、“join”、“where”、“group by”。我渴望了解更多,但到目前为止无法理解更高级的 mysql 概念。提前谢谢了。