Есть программа написанная на c# c использованием sql и winforms,программа отдел кадров,нужно добавить функционала в программу, сделаны простые вещи типа добавить,удалить и выборка записи,нужно добавить изменение и что то еще присущее отделу ...
Mysql Сделать хранимую процедуру быстрее
Я в sql не сильно разбираюсь, написал такую хранимку. Хорошо бы ее сделать быстрее и эффективнее, если это возможно.
Есть числа в базе данных. Нужно рассчитать максимальную серию не выпадения.
Пример
Числа: 0 0 0 0 1 2 1 1 2 3 4 5 5 6 5 6 6 6 1
Макс серия не выпадения
0-15
1-10
2-10
3-9
4-10
5-11
6-13
Логика рассчета:
К примеру, 0 - мы видим что он выпадает 4 раза подряд, и после не выпадает - значит считаем количество с последнего выпадения нуля и до конца.
К примеру 4 - мы видим что количество до первого выпадения 4 больше, чем количество цифр после 4 - значит записываем первое количество.
Таблица:
id bigint
result int
date datetime
Используется mysql
Сама хранимка ниже.
И вопрос такой, где лучше считать, на стороне SQL или PHP. Важна скорость расчетов
DELIMITER $
CREATE DEFINER=`root`@`localhost` FUNCTION `CalculateStreakOfNonDropouts`(`number` INT, `beginDate` DATETIME, `endDate` DATETIME) RETURNS int(11)
BEGIN
DECLARE dates INT;
DECLARE currentIndex INT;
DECLARE nextIndex INT;
DECLARE maxSeries INT;
DECLARE tmpSeries INT;
DECLARE firstIteration INT;
SET firstIteration = 0;
SET tmpSeries = 0;
SET currentIndex = -1;
SET nextIndex = 0;
SET maxSeries = 0;
SET dates = (SELECT COUNT(`date`) FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
IF dates=0 THEN
SET maxSeries = (SELECT COUNT(`result`) FROM `rolls` WHERE `date`>=(SELECT beginDate) AND `date`
ELSEIF dates=1 THEN
SET tmpSeries = (SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number and `date`>=(SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
SET maxSeries = (SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number and `date`=(SELECT beginDate) AND `date`=(SELECT beginDate));
IF tmpSeries>maxSeries THEN
SET maxSeries=tmpSeries;
END IF;
ELSE
loop_1: WHILE currentIndex
IF firstIteration=0 THEN
SET maxSeries=(SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number AND `date` BETWEEN (SELECT beginDate) AND (SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
SET firstIteration=1;
END IF;
SET currentIndex=currentIndex+1;
SET nextIndex=nextIndex+1;
IF nextIndex=dates THEN
set tmpSeries=(SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number AND `date` BETWEEN (SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
ELSE
SET tmpSeries=(SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number AND `date` BETWEEN (SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`=(SELECT beginDate) AND `date`
END IF;
IF tmpSeries>maxSeries THEN
SET maxSeries=tmpSeries;
END IF;
END WHILE;
END IF;
RETURN maxSeries;
END$
DELIMITER ;
Заявки фрилансеров
Похожие заказы
- Базы данных1 заявкаЗакрыт4 года назад
- $250
[table]ЗадачаСуществует система проведения олимпиад. Изнутри это, на самом деле, достаточно сложная вещь с богатой функциональностью (говоря умными словами, она поддерживает ведение проектной деятельности по информационному, техническому и методическому обеспечению олимпиад). Естественно, под всю эту функциональность ...
Базы данныхнет заявокЗакрыт4 года назад mysql запрос использует ON DUPLICATE KEY UPDATE нужно его в pg переделать
Базы данныхнет заявокЗакрыт4 года назадЕсть числа в базе данных. Нужно рассчитать максимальную серию не выпадения. Пример Числа: 0 0 0 0 1 2 1 1 2 3 4 5 5 6 5 ...
Базы данныхнет заявокЗакрыт4 года назадК существующей базе данных MS SQL Server (или Oracle), состоящей из 2х таблиц (Movies - 6 полей и Orders - 6 полей), написать веб-приложение на Java (или на C#), поволяющее: ...
Базы данных1 заявкаЗакрыт4 года назадСеть стриптиз-клубов ищет на постоянную работу PHP программиста (удаленно) ЗП 1200 -1400 USD (точно определим по результатам собеседования) Технические требования: - PHP, в том числе хорошие ...
Базы данных15 заявокЗакрыт4 года назадЕсть старенькая программка softlogic plc под Windows XP управления установкой по производству бетона. Delphi+Firebird. Исходников нет. Желания модернизироваться у заказчика нет. Весь процесс выпуска бетона фиксируется в БД. Нужен отчет, предположительно IBExpert/Report Manager,для вывода печатной ...
Базы данных1 исполнительЗавершен4 года назад- $5
Нужны урл всех разделов из каталога Авито. Результат нужен в ексель с разбивкой по столбцам/строкам для удобства выборки урл из требуемых категорий/разделов.
Базы данных1 заявкаЗакрыт4 года назад Добрый день! Требуется написать ТЗ для базы данных (точнее, для дополнительных модулей в имеющейся БД). Сроки кратчайшие
Базы данных1 заявкаЗакрыт4 года назадНужно разработать парсер Facebook с возможностью выгрузки результатов в excel-файл. Разработка "под ключ" (прокси/впс/обход капчи...). Какие данные ожидаются в результате парсингаFB : Друзья/подписчики юзера - ФИО, ссылка на профиль, email, дата ...
Базы данныхнет заявокЗакрыт4 года назад