Предположим, что существует 25 групп программистов, с 5-100 программистов в каждой группе. Каждой группе программистов поручено написать запрос, на который ссылается этот вопрос. В ответ на эту задачу многие программисты в каждой группе начинают пить сильно. Каждая группа имеет укомплектованный бар, состоящий из:Получить максимальное количество последовательных повторяющихся записей в MySQL
- Виски
- Водка
- Пиво
- воды
Каждый раз, когда программист заканчивает пить, новая строка добавляется в таблицу в том числе:
- Время, когда напиток был закончен
- Group ID
- Программист ID
- Типа напитка потребляется
Руководитель программы хочет получать по электронной почте каждые шесть часов со списком программистов, которые потребляли 5 или более Бирса в ряде, в пределах последние 6 часов, без выстрела водки/виски или стакана воды. Общее количество пива, которое потреблял каждый программист, не переходя на другой напиток хотя бы один раз, должно быть включено в отчет.
Если по крайней мере один напиток, кроме пива потребляется до достижения 5 сортов пива, то, что программист не будет идти в списке.
Там нет верхней или нижней границы на количество напитков, которые программист может потреблять в 6-часовой период.
Там нет никаких требований по типу или заказ напитков, что любой программист может потреблять.
База данных MySQL имеет таблицу 'напитков' с:
- drinks_id INT (11) PK Н. И.
- group_id INT (11) NN
- programmer_id INT (11) NN
- type_of_drink УАКСНАК (25) Н.Н.
- time_finished DATETIME NN
(тип напиток, вероятно, должен быть в другом столе, а drink_type_id используется, но я собираюсь для простоты здесь)
Ядро того, что я ищу, - это максимальное значение счета числа последовательных строк с помощью type_of_drink = 'beer 'для каждой комбинации групп/программистов в течение определенного периода времени. Я исчерпал свои навыки SQL пытаюсь подсчитать количество последовательных записей, которые существуют между двумя записями с type_of_drink <> «пивом» и возвращая максимальное значение для каждой комбинации группы/программатор. Я не могу понять, что это правильно, и, возможно, это не так, чтобы взглянуть на эту проблему.
Заранее спасибо. Я буду рад предоставить любую дополнительную информацию или требования, если это необходимо.
Вы пробовали функцию оконной обработки? Вы можете сгруппировать программистом и выпить и вернуть счет (*) и повредить настройками, чтобы перезапустить счет каждый раз, когда вы нажмете новый напиток. Взгляните на http://technet.microsoft.com/en-us/library/ms189461.aspx, документы действительно детализированы, но, надеюсь, укажут вам в правильном направлении. Если вам нужна дополнительная помощь, попробуйте добавить образцы данных в sql скрипт и дать нам ожидаемый результат для работы. – Vulcronos
@ Vulcronos MySql не имеет встроенных функций ... [но их можно эмулировать с использованием пользовательских переменных] (http://explainextended.com/2009/03/10/analytic-functions-first_value-last_value-lead- отставание /). –
@MichaelFredrickson Спасибо за информацию. Я считаю, что функции Windowing настолько полезны, что я часто ненавижу использовать платформу, которая их не имеет. Я знаю, что вы также можете использовать группу, чтобы получить агрегированные значения, а затем присоединиться к исходной таблице, чтобы получить нужные вам данные. – Vulcronos