У каждого сотрудника уже есть таблица свободных временных интервалов в 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 и т. д.) ПОСЛЕДОВАТЕЛЬНЫХ свободных временных интервала в каждом временном интервале. Как новичок, приведенные ниже коды INNER JOIN - это все, что я знаю, чтобы написать, если запрос предназначен для 2 последовательных временных интервалов.
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», «представления» и т. д., пожалуйста, объясните, как эти вещи работают. Опять же, как новичок в MySQL, "выбрать", "присоединиться", "где", "группировать по" - это все, что я знаю до сих пор. Я очень хочу узнать больше, но до сих пор не понимаю более продвинутых концепций mysql. Спасибо заранее.
CASE WHEN start_time=@st+INTERVAL 1 HOUR THEN @somevartogroupby ELSE @somevartogroupby :=@somevartogroupby +1 END AS g
- person Mihai   schedule 10.01.2015